Как сложить и подытожить в одном и том же запросе TSQL - PullRequest
3 голосов
/ 07 июля 2011
select problemrecordedbytitle,problemstatus ,
       count(problemstatus) from problemtable 
where problemrecordedccyy >='2011'
and problemrecordedbytitle like 'LPM%'
group by problemrecordedbytitle, problemstatus
order by problemrecordedbytitle asc

LPM-AMS-EDW Open    1
LPM-AMS-EDW WIP     1
LPM-AMS-EOM Closed  4

этот sql предоставляет мне хорошую сводку статусов.однако сегодня я получил новое требование.

Я хочу суммировать все, то есть count (problemstatus) и count (problemstatus <> closed) в итоге.это должно быть похоже на

LPM-AMS-EDW    NotClosed    2
LPM-AMS-EDW    Total        6

Я не уверен, как я могу сделать это в TSQL

Ответы [ 3 ]

2 голосов
/ 07 июля 2011

Проверьте накопительный пакет:

http://msdn.microsoft.com/en-us/library/ms177673.aspx

или за 2005 год: http://msdn.microsoft.com/en-us/library/ms177673%28v=SQL.90%29.aspx

 select problemrecordedbytitle, problemstatus, count(problemstatus) from problemtable 
 where problemrecordedccyy >='2011'
 and problemrecordedbytitle like 'LPM%'
 group by rollup(problemrecordedbytitle, problemstatus)
 order by problemrecordedbytitle asc

Если вы хотите сгруппировать разные статусы, то что-то вроде:

 select problemrecordedbytitle, 
 case problemstatus when 4 then 'Closed' ELSE 'NotClosed' END as Status,
 Count(1)
 where problemrecordedccyy >='2011'
 and problemrecordedbytitle like 'LPM%'
 group by rollup(problemrecordedbytitle, case problemstatus when 4 then 'Closed' ELSE 'NotClosed' END)

В 2005 году я думаю, что синтаксис выглядит примерно так:

 .....
 GROUP BY problemrecordedbytitle, case problemstatus when 4 then 'Closed' ELSE 'NotClosed' END
 WITH ROLLUP

Может быть не так, как указано выше, но вы определенно можете сделать это с 2005

0 голосов
/ 18 июля 2014
select COUNT(problemrecordedbytitle) AS Problem_Rec_Title, MAX(problemrecordedbytitle) as Prob_Rec_Title, problemstatus
       where problemrecordedccyy >='2011'
and problemrecordedbytitle like 'LPM%'
group by problemrecordedbytitle, problemstatus
order by problemrecordedbytitle asc

Поиграйте с COUNT и MAX - так я решил свою проблему, которая была похожей.

COUNT отсчитывает, затем MAX дает максимальное число (промежуточный итог сортов).Затем вы можете группировать и упорядочить по полям.

Надеюсь, это поможет.

0 голосов
/ 07 июля 2011

Вы действительно должны быть осторожны, чтобы не группировать поля с разными значениями.Это даст вам результат, который вы ищете, как описано.

;WITH a as(
SELECT problemrecordedbytitle,problemstatus from problemtable  
WHERE problemrecordedccyy >='2011' 
and problemrecordedbytitle like 'LPM%' 
)
SELECT problemrecordedbytitle, 'NotClosed', COUNT(*) FROM a WHERE problemstatus <> 'Closed' 
GROUP BY problemrecordedbytitle
UNION ALL
SELECT MIN(problemrecordedbytitle), 'Total', COUNT(*) FROM a

Я бы переписал это, чтобы предотвратить проблемы с группами:

declare @problemtable table (problemrecordedbytitle varchar(20), problemstatus varchar(10))

INSERT @problemtable values('LPM-AMS-EDW', 'Open')
INSERT @problemtable values('LPM-AMS-EDW','WIP')
INSERT @problemtable values('LPM-AMS-EOM','Closed')
INSERT @problemtable values('LPM-AMS-EOM','Closed')
INSERT @problemtable values('LPM-AMS-EOM','Closed')
INSERT @problemtable values('LPM-AMS-EOM','Closed')

;WITH a as(
SELECT left(problemrecordedbytitle, 3) problemrecordedbytitle,problemstatus 
FROM @problemtable -- replace this tablename for your script 
-- You need these lines for your script
-- WHERE problemrecordedccyy >='2011' 
-- and problemrecordedbytitle like 'LPM%' 
)
SELECT problemrecordedbytitle, 'NotClosed' [status], COUNT(*) count FROM a WHERE problemstatus <> 'Closed' 
GROUP BY problemrecordedbytitle
UNION ALL
SELECT MIN(problemrecordedbytitle), 'Total', COUNT(*) FROM a

Результат:

problemrecordedbytitle status    count
---------------------- --------- -----------
LPM                    NotClosed 2
LPM                    Total     6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...