0

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

予想されるセマンティクスは次のとおりです。

  1. ステータスが 2、3、または 4 以外のすべてのエントリを無視します
  2. 指定された名前ごとに、2、3、および 4 の出現を数え、合計数を専用の列に表示します。
  3. 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 ステートメントを使用することになっていることがわかりましたが、その方法がわかりません。

4

2 に答える 2

1
Select   name,
         sum(case when status=2 then 1 else 0 end) as Count_2,
         sum(case when status=3 then 1 else 0 end) as Count_3,
         sum(case when status=4 then 1 else 0 end) as Count_4
from     work
group by name
于 2013-08-02T19:59:55.123 に答える
0
select Name,sum(Case when Status=2 then 1 Else 0 End) Count_2,sum(Case when Status=3 then 1 Else 0 End) Count_3,
sum(Case when Status=4 then 1 Else 0 End) Count_3
From tableName
where Status in(2,3,4)
Group By Name
于 2013-08-02T19:57:48.600 に答える