查看某个项目是否在数据库列中多次出现
我想检查一段数据是否在我的表中使用SQL在一个特定的列中出现多次。 这是我到目前为止的SQL代码:
select * from AXDelNotesNoTracking where count(salesid) > 1
salesid
是我希望检查的列,任何帮助将不胜感激,谢谢。
它应该是:
SELECT SalesID, COUNT(*) FROM AXDelNotesNoTracking GROUP BY SalesID HAVING COUNT(*) > 1
关于你的初始查询:
- 你不能做SELECT *,因为这个操作需要一个GROUP BY,而列需要在GROUP BY中或在一个聚合函数中(即COUNT,SUM,MIN,MAX,AVG等)
- 由于这是一个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