Группировка результатов запроса, где значения не равны нулю - PullRequest
2 голосов
/ 24 сентября 2019

У меня есть запрос, который воссоздает имена строк в имена столбцов во втором запросе.В идеале будет иметь два запроса с использованием временных таблиц реализации.У меня есть первый запрос, подобный этому:

select * from scores;

Дает мне этот результат

EmpID  Class    Amount
1      First    200
1      Second   300
1      Third    400

Желаемые результаты:

EmpID  First    Second   Third
1      200      300       400

Запрос уже пробовал

select EmpID,
(case when p.DeductionName like '%First' then Amount else null end) as First, 
(case when p.DeductionName like '%Second' then Amount else null end) as Second,
(case when p.DeductionName like '%Third' then Amount else null end) as Third
from scores;

Этот дает такой результат

EmpID  First    Second   Third
1      200      null      null
1      null     300       null
1      null     null       400

Сейчас я борюсь за то, как мне получить желаемый результат, т.е.

EmpID  First    Second   Third
1      200      300       400

Ответы [ 3 ]

4 голосов
/ 24 сентября 2019

использовать условное агрегирование

select EmpID,
max(case when p.DeductionName like '%First' then Amount end) as First, 
max(case when p.DeductionName like '%Second' then Amount  end) as Second,
max(case when p.DeductionName like '%Third' then Amount  end) as Third
from scores group by EmpID
0 голосов
/ 24 сентября 2019

Вы можете использовать команду pivot на сервере sql

SELECT *
FROM
(
    SELECT F.ID,F.RK,F.VAL
    FROM 
    (
        VALUES('1','First ',200),
        ('1','Second',300),
        ('1','Third ',400)
    )F(ID,RK,VAL)
)AS D
PIVOT(SUM(D.VAL) FOR D.RK IN ([First],[Second],[Third]))
AS PVT
0 голосов
/ 24 сентября 2019

Вот ваш запрос.

select t1.EmpID,
   sum(coalesce(t1.Amount, 0)) as First,
   sum(coalesce(t2.Amount, 0)) as Second,
   sum(coalesce(t3.Amount, 0)) as Third
from scores t1
left join scores t2 on t2.EmpId = t1.EmpId and t2.DeductionName like '%Second'
left join scores t3 on t3.EmpId = t1.EmpId and t3.DeductionName like '%Third'
group by t1.EmpId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...