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

标签 sql

我想使用 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 值的原因。

编辑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/

相关文章:

sql - PostgreSQL 从行中选择最大值

sql - GUID 有没有可能全部用完?

sql - Oracle中如何批量插入

java - 在 Spring JPA 中映射 postgres 数组时出错

mysql - 从已选择的表中选择数据

mysql - 如何统计某天内的行数

mysql - 选择不同的 2 列

sql - 案例陈述就是答案吗

mysql - 如何在mysql中的第一个表中找到记录的最后一条记录

mysql - SQL 交叉匹配来自不同列和行的数据