2013-10-21 126 views
-3

我的表看起来像这样:如何为此编写sql查询?

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

它也有助于提供该表的定义。 – matthudson

+5

['PIVOT'](http://technet.microsoft.com/en-us/library/ms177410(v = sql.105).aspx) –

回答

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可以提供一个更好的选择。

+0

非常感谢你 – balaji

2

透视解决方案,我用。从SQL服务器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 
+0

感谢您的支持 – balaji