如何为此编写SQL查询?

时间:2013-10-21 11:15:20

标签: sql sql-server tsql

我的表格如下:

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'

我怎样才能实现这个目标?

3 个答案:

答案 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