我的表格如下:
id staus
1 p
1 p
1 c
2 p
2 c
我需要为每个'p'
生成状态为'c'
和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'
我怎样才能实现这个目标?
答案 0 :(得分: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'
进行汇总时,pivoting可能会提供更好的选择。
答案 1 :(得分: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
答案 2 :(得分:0)
您似乎需要对表格进行转动,当我遇到同样的问题时,我会使用一篇简单的文章pivot table sql server