2013-06-25 20 views
3

我想要計算字段D中不同值的數量,按字段A,B和C分組。如果計數返回1,我想知道什麼是D的值是。TSQL選擇一個字段我還在計數

例如:

SELECT A, B, C, COUNT(D) AS D_COUNT 
FROM EXAMPLE_TABLE 
GROUP BY A, B, C 
HAVING COUNT(D) = 1 

這已經有一段時間,因爲我做了SQL,和我是見過世面的,並圍繞這一點,我相信有可能是一些非常簡單而明顯的我俯瞰。例如,我嘗試了多個連接到同一個表,但我一直遇到'D'不包含在聚合或組中的問題.. 任何想法?

回答

5

由於在每個組中只有一個非NULLD,您可以使用MAXMIN來查看該值是多少。

SELECT A, 
     B, 
     C, 
     COUNT(D) AS D_COUNT, 
     MAX(D) AS D 
FROM EXAMPLE_TABLE 
GROUP BY A, 
      B, 
      C 
HAVING COUNT(D) = 1 

對於COUNT(D) = @N適用的此問題的更一般的答案將使用窗口集合。例如

;WITH T 
    AS (SELECT A, 
       B, 
       C, 
       D, 
       COUNT(D) OVER (PARTITION BY A, B, C) AS D_COUNT 
     FROM EXAMPLE_TABLE) 
SELECT * 
FROM T 
WHERE D_COUNT = @N 
+0

上帝,我從來沒有想到這一點。比我混雜的連接好得多。謝謝! –

2

嘗試是這樣的:

SELECT A, B, C, MAX(D) AS D, COUNT(D) AS D_COUNT 
FROM EXAMPLE_TABLE 
GROUP BY A, B, C 
HAVING COUNT(D) = 1 
相關問題