Work
と の2 つの列を持つ名前のテーブルがありName
ますStatus
。
SELECT Name,Status FROM Work
--------+----------
Name |Status
--------+----------
MyBJE |2
MyBJE_2 |9
MyBJE |8
MyBJE_2 |9
MyBJE |7
MyBJE_2 |9
MyBJE |2
MyBJE |8
MyBJE_2 |3
MyBJE |8
MyBJE |8
MyBJE_2 |1
MyBJE_2 |8
MyBJE |4
前述のデータから次の結果を返すクエリを作成する方法を見つけようとしています。
--------+-------+-------+-------
Name |COUNT_2|COUNT_3|COUNT_4
--------+-------+-------+-------
MyBJE |2 |0 |1
MyBJE_2 |0 |1 |0
予想されるセマンティクスは次のとおりです。
- ステータスが 2、3、または 4 以外のすべてのエントリを無視します
- 指定された名前ごとに、2、3、および 4 の出現を数え、合計数を専用の列に表示します。
- Name に Status が 2、3、または 4 のエントリがない場合は、この Nameがすべての COUNT_X 列に 0 で結果に表示されることを確認してください。
これが私がこれまでに行ったことです(データは上記の例ではなく、実際のデータベースから取得されます)。
SELECT Name, Status, COUNT(1)
FROM (SELECT Name, (CASE when Status IN (2,3,4) then Status else 0 end) as Status FROM Work) x
GROUP BY Name, Status
--------+------+----------------
Name |Status|(No column name)
--------+------+----------------
MyBJE_2 |0 |262
MyBJE_2 |2 |1033
MyBJE |0 |2496
これで、PIVOT ステートメントを使用することになっていることがわかりましたが、その方法がわかりません。