2010-10-22 125 views
2

我一直堅持了很長一段時間,現在試圖讓此查詢工作。 這裏的設置:SQL查詢幫助:從計數子查詢中返回不同的值

我有一個包含非唯一(Number)列和非唯一(Result)列的[Notes]表。我希望創建一個SELECT語句,將顯示的每個不同的(數字)值,其中{(號碼),(結果)}元組,其中結果的計數=「NA」是> 25.

Number | Result 
100 | 'NA' 
100 | 'TT' 
101 | 'NA' 
102 | 'AM' 
100 | 'TT' 
200 | 'NA' 
200 | 'NA' 
201 | 'NA' 

基本上,有一個自動撥號程序可以調用一個號碼並根據呼叫結果返回一個代碼。我們希望忽略返回超過25次的「不適用」代碼的數字。

我的基本的嘗試至今都被類似:

SELECT DISTINCT n1.Number 
FROM Notes n1 
WHERE (SELECT COUNT(*) FROM Notes n2 
     WHERE n1.Number = n2.Number and n1.Result = 'NA') > 25 

我知道這個查詢是不正確的,但總的來說,我不知道如何從最初的選擇有關的DISTINCT n1.Number到子查詢COUNT中使用的數字。我看到的大多數示例並不是通過向返回的COUNT添加條件來實現此目的。在過去的五年中我沒有必要觸及太多的SQL,所以我很生疏。

+2

1)我討厭閱讀,並試圖理解,顯示你有什麼表,你想要它看起來像什麼。 2)你是電話推銷員嗎? – vol7ron 2010-10-22 05:42:10

+0

如果您發佈代碼或XML,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010),以良好地格式化和語法突出顯示它! – 2010-10-22 06:33:09

回答

5

,你可以做這樣的:

SELECT Number 
FROM Notes 
WHERE Result = 'NA' 
GROUP BY Number 
HAVING COUNT(Result) > 25 
+0

+1因爲有,但你忘了WHERE – 2010-10-22 05:48:54

+0

謝謝,這很好。只是其中的一種情況,我被鎖在試圖做一件事情而看不見它。 – Joe 2010-10-22 06:01:07

+1

@Arnauld自從被接受以來,我爲你添加了WHERE關鍵字,以防有人複製並粘貼它 – 2010-10-22 06:06:57

2

試試這個:

SELECT Number 
FROM (
    SELECT Number, Count(Result) as CountNA 
    FROM Notes 
    WHERE Result = 'NA' 
    GROUP BY Number 
) 
WHERE CountNA > 25 

編輯:根據SQL產品,您可能需要例如提供派生表的表相關名

SELECT DT1.Number 
    FROM (
     SELECT Number, Count(Result) as CountNA 
      FROM Notes 
     WHERE Result = 'NA' 
     GROUP 
      BY Number 
     ) AS DT1 (Number, CountNA) 
WHERE DT1.CountNA > 25; 
+0

它不會識別第二個where子句中的CountNA。我假設這是因爲範圍只是在該子查詢中? – Joe 2010-10-22 05:56:53

+0

@onedaywhen謝謝你 – 2010-10-22 10:16:14