У нас есть таблица [КПЭ], который выглядит следующим образом:Группируйте по сумме и сумме на основе значений столбцов без sum() over()?
RawId EmpId Date Hour Min KpiValue KpiName
106 ABC123 20160310 8 0 3 Kpi1
124 ABC123 20160310 8 0 65 Kpi1
121 ABC123 20160310 8 15 12 Kpi2
109 ABC109 20160310 8 0 34 Kpi2
112 ABC908 20160310 9 5 3 Kpi1
118 ABC907 20160310 8 30 24 Kpi1
115 ABC123 20160310 8 15 54 Kpi1
Я хотел бы группу EmpId, KpiName, дата, час. Так, например, с помощью этих данных, Kpi1 для EmpId ABC123 в час будет .
Так что я попытался использовать оператор CASE, но результат неверен. Я не проверял фактические итоги в результате, но суммы должны быть правильными. Это неправильный формат результата; каждый empid имеет две строки: одну для Kpi1 и одну для Kpi2.
select empid,
case kpiname when 'Kpi1' then sum(kpivalue) end as 'Kpi1',
case kpiname when 'Kpi2' then sum(kpivalue) end as 'Kpi2'
from
[Kpis]
where kpiname in ('Kpi1', 'Kpi2')
and date = 20160310 and hour = 8
group by empid, kpiname, hour
Как я могу использовать оператор Case для фиксации результатов?
Спасибо.
вы должны добавить «ELSE 0» в ваших случаях, в противном случае будет возвращать NULL – FLICKER
@FLICKER СЛУЧАЙ возвращается, когда не существует значения, которые соответствуют условию, в данном конкретном случае Kpi1 и Kpi2 существует NULL. – Balde
Вы правы, но, как правило, это хорошая практика. – FLICKER