TSQL选择一个我也在计算的字段

时间:2013-06-25 20:46:16

标签: sql sql-server tsql join

我正在尝试计算字段D中的不同值的数量,按字段A,B和C分组。如果计数返回1,我想知道D的值是什么。

例如:

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

自从我完成SQL以来已经有一段时间了,而且我已经在这上面了,而且我确信可能会有一些非常简单明显的东西我会忽略它。例如,我已经尝试了几个连接到同一个表,但我一直遇到“D”未包含在聚合或组中的问题。 有任何想法吗?

2 个答案:

答案 0 :(得分:5)

由于每个组中只有NULL个非D值,您可以使用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

答案 1 :(得分: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