5

次のようなクエリがあります

SELECT ju.name,
    COUNT(DISTINCT p.value) AS nproblems
FROM #problems p
JOIN <thing> ju ON <whatever>
WHERE <condition 1>
    AND <condition 2>
    AND <condition 3>
GROUP BY ju.name
ORDER BY nproblems DESC

これで問題なく、名前と値を含む結果セットが得られます。しかし、私が本当に気にかけているのは、WHERE 節がない場合、条件 1 のみ、条件 1+2、条件 1+2+3 がある問題の数です。書きたい

SELECT ju.name,
    COUNT(DISTINCT p.value WHERE <condition 1>) foo,
    COUNT(DISTINCT p.value WHERE <condition 2>) bar,
...

しかし、残念ながらできません。これを行う良い方法はありますか?

4

1 に答える 1

4

CASEこれを行うには、次の式を使用できます。

SELECT ju.name,
    SUM(CASE WHEN <condition 1> THEN 1 ELSE 0 END) AS foo,
    SUM(CASE WHEN <condition 1> THEN 1 ELSE 0 END) AS bar,
    ...
FROM #problems p
JOIN <thing> ju ON <whatever>
GROUP BY ju.name
ORDER BY nproblems DESC;

ただし、MS SQL Server や Oracle などのテーブル演算子をサポートする RDBMS を使用している場合は、PIVOTそれを直接使用できます。


SQL Server を使用しているため、PIVOTテーブル演算子を使用してこれを行うことができます。

SELECT *
FROM 
(
) AS t
PIVOT
(
   COUNT(value)
   FOR name IN(...)
) AS p;
于 2013-03-19T11:28:47.487 に答える