-3

我的表如下所示:

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'

我怎样才能做到这一点?

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 server时,我使用了一篇简单的文章

于 2013-10-21T11:19:38.037 回答