Группа SQL и сумма условий в последней строке

#sql #hana

Вопрос:

У меня есть несколько предметов, которые принадлежат к разным группам, некоторые из них неизвестны группе. Мне нужна сумма каждой группы по дате. Я просто пробую ниже SQL, но все равно не совсем то, что я хочу:

 with A as (
SELECT PG, EMANAGER_DATE,
  CASE WHEN (EMANAGER_DATE = '2021-09') THEN SUM(NET_VALUE_USD) ELSE 0 END AS "2021-09",
  CASE WHEN (EMANAGER_DATE = '2021-10') THEN SUM(NET_VALUE_USD) ELSE 0 END AS "2021-10",
  CASE WHEN (EMANAGER_DATE = '2021-11') THEN SUM(NET_VALUE_USD) ELSE 0 END AS "2021-11",
  CASE WHEN (EMANAGER_DATE = '2021-12') THEN SUM(NET_VALUE_USD) ELSE 0 END AS "2021-12"
  FROM table1
  GROUP BY PG, EMANAGER_DATE
)
select PG, max("2021-09") AS "2021-09", max("2021-10") AS "2021-10", max("2021-11") AS "2021-11", max("2021-12") AS "2021-12" from A GROUP BY PG
 

БД: SAP HANA

Данные:

Предмет ПГ NET_VALUE_USD EMANAGER_DATE
1 1 100 2021-09
2 1 200 2021-10
3 2 300 2021-09
4 2 400 2021-09
5 3 500 2021-09
6 3 200 2021-11
7 3 300 2021-11
8 900 2021-09

Ожидаемый результат:

ПГ 2021-09 2021-10 2021-11
? 900 0 0
1 100 200 0
2 700 0 0
3 500 0 500
весь 2200 200 500

Комментарии:

1. Похоже, что иногда их значения добавляются, в других случаях они сбрасываются. В чем тут логика?

2. Я обновляю свои данные, в них добавляются значения.

3. Я думаю, было бы неплохо, если бы вы добавили какой-нибудь текст в свой вопрос. Это похоже на необъяснимый билет Jira вместо вопроса о переполнении стека.

4. Был ли вам нужен этот ожидаемый результат? Это должно быть отображено или где-то храниться? И что ты уже пробовал?

5. Для отображения.

Ответ №1:

Вы можете настроить свой запрос и использовать GROUPING SETS :

 SELECT (CASE WHEN GROUPING(PG) = 1 THEN 'Total' ELSE PG END) as PG,
       SUM(CASE WHEN EMANAGER_DATE = '2021-09' THEN NET_VALUE_USD ELSE 0 END) AS "2021-09",
       SUM(CASE WHEN EMANAGER_DATE = '2021-10' THEN NET_VALUE_USD ELSE 0 END) AS "2021-10",
       SUM(CASE WHEN EMANAGER_DATE = '2021-11' THEN NET_VALUE_USD ELSE 0 END) AS "2021-11",
       SUM(CASE WHEN EMANAGER_DATE = '2021-12' THEN NET_VALUE_USD ELSE 0 END) AS "2021-12"
FROM _SYS_BIC."APP_SCM/ZCV_APP_SCM_CTOS_PARENT_UNCONFIRMED_BACKLOG_P"
GROUP BY GROUPING SETS ( (PG), () );
 

Комментарии:

1. Спасибо за вашу помощь, как я могу это сделать, если у меня их много EMANAGER_DATE с помощью pivot ?

2. @YuTing . . . Если вам нужна итоговая строка, я думаю, вам лучше использовать этот подход.