我想使用 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 值的原因。
编辑2:
下面的查询是由 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
关于sql - 查看某个项目是否在数据库列中出现多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9736944/