2011-12-28 2 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

Добро пожаловать в переполнение стека! Что вы пробовали? Если вы хотите сделать код по запросу, вы должны нанять консультанта. Переполнение стека - это помощь по конкретным вопросам. – JNK

ответ

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

Спасибо, он решил проблему! –

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 

ИЛИ

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