sql группировка расчета - PullRequest
       34

sql группировка расчета

0 голосов
/ 22 января 2020

У кого-нибудь есть решение, как сгруппировать суммы двух категорий с инструкциями case?

На приведенном ниже снимке экрана я хотел бы объединить две строки в одну и просто отобразить суммы PE и NPE в столбцах flag1total и flag2total, но он не работает.

Это SQL, который у меня есть на данный момент:

select type, flag, coalesce(sum(value),0) total,
case when flag = "NPE" then coalesce(sum(value),0) else "" end as flag1total,
case when flag = "PE" then coalesce(sum(value),0) else "" end as flag2total
from maintable
group by type, flag;

screenshot

данные выглядят так:

 type     flag          value
 P_OTH    PE            23525
 P_OTH    PE            13525
 P_CRE    PE            232525
 P_OTH    PE            4525
 ....

Ожидаемый результат - это (одна строка на тип и векторизованные суммы для флагов):

 type     flag          total      flag1total   flag2total
 P_OTH    PE, NPE       3023624    1132707      1890917

Ответы [ 2 ]

1 голос
/ 22 января 2020

Вам нужно ниже -

SELECT  type
       ,GROUP_CONCAT(flag, ', ') flag
       ,coalesce(sum(value),0) total
       ,coalesce(sum(case when flag = "NPE" then value else 0 end),0)   as flag1total
       ,coalesce(sum(case when flag = "PE" then value else 0 end),0)  as flag2total
 from maintable
 group by type;
1 голос
/ 22 января 2020

Вам нужно использовать регистр внутри вашей функции суммы. Попробуйте что-то вроде этого:

select type, coalesce(sum(value),0) total,
    coalesce(sum(case when flag = "NPE" then value else 0 end),0)   as flag1total,
    coalesce(sum(case when flag = "PE" then value else 0 end),0)  as flag2total
 from maintable
 group by type;

Обратите внимание, что 'flag' не может быть в группе по предложению.

...