查看某个项目是否在数据库列中多次出现

我想检查一段数据是否在我的表中使用SQL在一个特定的列中出现多次。 这是我到目前为止的SQL代码:

select * from AXDelNotesNoTracking where count(salesid) > 1 

salesid是我希望检查的列,任何帮助将不胜感激,谢谢。

它应该是:

 SELECT SalesID, COUNT(*) FROM AXDelNotesNoTracking GROUP BY SalesID HAVING COUNT(*) > 1 

关于你的初始查询:

  1. 你不能做SELECT *,因为这个操作需要一个GROUP BY,而列需要在GROUP BY中或在一个聚合函数中(即COUNT,SUM,MIN,MAX,AVG等)
  2. 由于这是一个GROUP BY操作,HAVING子句将会过滤它而不是WHERE

编辑:

而我只是想到了这一点,如果你想看看哪些项目在那里不止一次(但这取决于你正在使用哪个数据库):

 ;WITH cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY SalesID ORDER BY SalesID) AS [Num] FROM AXDelNotesNoTracking ) SELECT * FROM cte WHERE cte.Num > 1 

当然,这只是显示了具有相同SalesID的行,但没有显示多次出现的初始SalesID值。 意思是,如果一个SalesID出现3次,这个查询将显示实例2和3,但不是第一个实例。 不过,这可能会有所帮助,具体取决于您寻找多个SalesID值的原因。

EDIT2:

下面的查询由APC发布,比上面提到的CTE更好,它显示SalesID已经出现多次的所有行。 我在这里包括它的完整性。 我只是添加了一个ORDER BY来保持SalesID值分组在一起。 ORDER BY也可能有助于上面的CTE。

 SELECT * FROM AXDelNotesNoTracking WHERE SalesID IN ( SELECT SalesID FROM AXDelNotesNoTracking GROUP BY SalesID HAVING COUNT(*) > 1 ) ORDER BY SalesID 

怎么样:

 select salesid from AXDelNotesNoTracking group by salesid having count(*) > 1; 

尝试这个:

 select salesid,count (salesid) from AXDelNotesNoTracking group by salesid having count (salesid) >1