2012-03-16 60 views
34

我想檢查一條數據是否在我的表中的特定列中使用SQL出現多次。這裏是我到目前爲止我的SQL代碼:查看某個項目是否在數據庫列中多次出現

select * from AXDelNotesNoTracking where count(salesid) > 1 

salesid是我希望檢查之列,任何幫助,將不勝感激,謝謝。

+2

什麼各種SQL的? MySQL的? Microsoft SQL Server?甲骨文?訪問? etc – UnhandledExcepSean 2012-03-16 12:11:13

回答

80

它應該是:

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 
0

試試這個:

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

-1這是缺少HAVING子句以僅標識出現多次的記錄,如原始問題所要求的那樣。 – 2012-03-16 12:23:17

+0

他沒有提到他只想查看1條以上的記錄,只能查看它們 – 2012-03-16 12:24:26

+1

問題指出:「我想檢查一段數據是否在特定列中出現一次以上」。如果沒有HAVING子句,您將返回所有值,並且如果該表很大,則很難找到多次出現的值。 – 2012-03-16 12:26:41

4

如何:

select salesid from AXDelNotesNoTracking group by salesid having count(*) > 1; 
相關問題