-3

私のテーブルは次のようになります。

id  staus
 1    p
 1    p
 1    c
 2    p
 2    c

'p'および'c'for eachのステータスを持つ行数を生成する必要があるidため、期待する結果は次のようになります。

id  p  c
 1  2  1    <-- id 1 has two rows with 'p' and one row with 'c'
 2  1  1    <-- id 2 has one row with 'p' and one row with 'c'

どうすればこれを達成できますか?

4

3 に答える 3

2

次のように実行できます。

SELECT
    id
,   SUM (CASE STATUS WHEN 'p' THEN 1 ELSE 0 END) as p
,   SUM (CASE STATUS WHEN 'c' THEN 1 ELSE 0 END) as c
FROM my_table
GROUP BY id

'p'やの'c'ように集計する固定項目がいくつかある場合は、ピボットを使用する方が適切なオプションになる場合があります。

于 2013-10-21T11:18:29.280 に答える
2

ソリューションをピボットします。sql-server 2008 以降で動作

declare @t table(id int, staus char(1))
insert @t values( 1,'p'),( 1,'p'),( 1,'c'),( 2,'p'),( 2,'c')

SELECT id, [p], [c] 
from @t
PIVOT
(count([staus])  
FOR staus
in([p],[c])  
)AS p

結果:

id  p  c
1   2  1
2   1  1
于 2013-10-21T11:28:56.303 に答える
0

テーブルのピボットを行う必要があるようです。同じ問題に直面したときに使用した簡単な記事がありますピボット テーブル SQL サーバー

于 2013-10-21T11:19:38.037 に答える