Как разделить запись по разным типам? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть этот запрос

Declare @TotalThreats int;
Declare @TotalThreats_M int;
Declare @TotalThreats_H int;
Declare @TotalThreats_L int;
(Select count(E.EnggDataID) as 'Total Threats', E.Area from EngineeringData E inner join RBIResults R on R.EnggDataID=E.EnggDataID  group by E.Area)
(Select count(E.EnggDataID) as 'Total Threats M',E.Area from EngineeringData E inner join RBIResults R on R.EnggDataID=E.EnggDataID where R.RiskOverall='M' group by E.Area) 
(Select count(E.EnggDataID) as 'Total Threats H',E.Area  from EngineeringData E inner join RBIResults R on R.EnggDataID=E.EnggDataID where R.RiskOverall='H' group by E.Area )
(Select count(E.EnggDataID) as 'Total Threats L',E.Area  from EngineeringData E inner join RBIResults R on R.EnggDataID=E.EnggDataID where R.RiskOverall='L' group by E.Area) 

--Select @TotalThreats,@TotalThreats_M,@TotalThreats_H,@TotalThreats_L

Показывает общее количество угроз для каждой области.

Но каждая область имеет 3 типа общего риска, т.е. H, M, L, MH . (Название столбцов - RiskOvera)

Теперь мой запрос в порядке, чтобы показать TotalThreats в соответствии с областью, но я также хочу увидеть различную общую сумму H, M, L, MH.

Например. Вывод должен быть таким

TotalThreats     Area   H   M   L   MH

   10             A     1   5   3   1

1 Ответ

1 голос
/ 18 февраля 2020

Использовать условную агрегацию:

select E.Area, count(*) as TotalThreats, 
       sum(case when R.RiskOverall = 'H' then 1 else 0 end) as risk_h,
       sum(case when R.RiskOverall = 'M' then 1 else 0 end) as risk_m,
       sum(case when R.RiskOverall = 'L' then 1 else 0 end) as risk_l,
       sum(case when R.RiskOverall in ('H', 'M', 'L') then 1 else 0 end) as risk_all
from EngineeringData E join
     RBIResults R
     on R.EnggDataID = E.EnggDataID
group by E.Area;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...