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

时间:2012-03-16 12:08:26

标签: sql

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

select * from AXDelNotesNoTracking where count(salesid) > 1

salesid是我想要检查的专栏,感谢任何帮助,谢谢。

4 个答案:

答案 0 :(得分:109)

应该是:

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
  3. 编辑:

    我只想到这个,如果你想多次看到哪些物品在那里(但这取决于你使用的是哪个数据库):

    ;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
    

答案 1 :(得分:8)

怎么样:

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

答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

要扩展所罗门·鲁兹基(Solomon Rutzky)的答案,如果您要查找显示在一定范围内的数据(即一次以上但少于5倍),则可以使用

having count(*) > 1 and count(*) < 5

您可以在其中使用所需的任何限定词-它们不必匹配,它们都包含在“具有”语句中。 https://webcheatsheet.com/sql/interactive_sql_tutorial/sql_having.php