2011-12-28 199 views
1

请帮我找到这个谜题的最佳解决方案?SQL Server查询?

我从这个表在这里如何前往:

ID_LOCAL ID_STATUS 
-------- --------- 
65  0 
65  0 
65  0 
65  0 
65  0 
65  0 
65  0 
65  1 
65  2 
93  0 
96  0 
186  1 

这个结果在这里:

ID_LOCAL TOTAL ID_STATUS=0 ID_STATUS=1 ID_STATUS=2 
-------- ----- ----------- ----------- ----------- 
65  9  7   1   1 
93  1  1   0   0 
96  1  1   0   0 
186  1  0   1   0 
+0

欢迎来到Stack Overflow!你有什么尝试?如果你想按代码做代码,那么你应该聘请一名顾问。堆栈溢出是针对特定问题的帮助。 – JNK 2011-12-28 12:21:52

回答

2
select ID_LOCAL, 
     count(*) as Total, 
     count(case when ID_STATUS = 0 then 1 end) as Status0, 
     count(case when ID_STATUS = 1 then 1 end) as Status1, 
     count(case when ID_STATUS = 2 then 1 end) as Status2 
from YourTable 
group by ID_LOCAL 
+0

谢谢,它解决了这个问题! – 2011-12-28 15:10:44

0

假设你的表名是Table

select 
    ID_LOCAL, 
    count(*) as TOTAL, 
    (SELECT COUNT(*) from Table WHERE ID_LOCAL = outr.ID_LOCAL AND ID_STATUS=0) AS [ID_STATUS=0], 
    (SELECT COUNT(*) from Table WHERE ID_LOCAL = outr.ID_LOCAL AND ID_STATUS=1) AS [ID_STATUS=1], 
    (SELECT COUNT(*) from Table WHERE ID_LOCAL = outr.ID_LOCAL AND ID_STATUS=2) AS [ID_STATUS=2] 
FROM Table outr 
GROUP BY ID_LOCAL 

OR

select 
    ID_LOCAL, 
    count(*) as TOTAL, 
    SUM(CASE ID_STATUS WHEN 0 THEN 1 ELSE 0 END) AS [ID_STATUS=0], 
    SUM(CASE ID_STATUS WHEN 1 THEN 1 ELSE 0 END) AS [ID_STATUS=1], 
    SUM(CASE ID_STATUS WHEN 2 THEN 1 ELSE 0 END) AS [ID_STATUS=2], 
FROM Table 
GROUP BY ID_LOCAL