Группировка, чтобы превратить результаты строк в сгруппированные столбцы - PullRequest
0 голосов
/ 05 марта 2019

В настоящее время я выбираю из таблицы db2, где каждая строка состоит из пользователя, субпользователя (например, user = manger, subuser = employee), категории, ежедневных продаж и еженедельных целей. Вот выбор всех и результаты:

SELECT * FROM USER_SALES_UNITS WHERE DATE >= CURRENT_DATE

  USER    |  SUB_USER        |  CATEGORY  |  DAILY  |  WEEKLY
  ------------------------------------------------------------
  123           212              RED          100        200
  123           212              BLUE         125        300
  123           212              GREEN        150        150
  123           212              BLACK        200        200
  123           212              ORANGE       250        300
  123           331              RED          125        150
  123           331              BLUE         150        200
  123           331              GREEN        300        300
  123           331              BLACK        450        150
  123           331              ORANGE       125        200

Итак, я получаю результаты для каждого менеджера. И это то, чего я ожидаю, но я заблудился о том, как добиться желаемых результатов, а именно о том, чтобы переместить категорию ежедневных продаж и еженедельные цели категории в заголовок для экспорта файла в сценарии

Я знаю, что мне нужно будет группировать по пользователям, но как мне правильно получить сумму ежедневных продаж каждой категории (сумма каждого экземпляра sub_user для каждой категории) и каждую недельную цель категории. Таким образом, в основном red_daily будет суммой всех дневных итогов, где категория имеет красный цвет, сгруппированных на уровне пользователя

Это то, чего я хотел бы достичь вместо приведенного выше результата:

  USER  |  RED_DAILY  |  RED_WEEKLY  |  BLUE_DAILY  | BLUE_WEEKLY  | GREEN_DAILY  |  GREEN_WEEKLY  |  BLACK_DAILY  |  BLACK_WEEKLY |  ORANGE_DAILY  | ORANGE_WEEKLY
  ------------------------------------------------------------------------------------------------------------------------------------------------------------------
  123           225             350           275           500             450               450             650           350               375             500

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Для меня это выглядит как большой сводный запрос:

SELECT
    USER,
    SUM(CASE WHEN CATEGORY = 'RED' THEN DAILY ELSE 0 END) AS RED_DAILY,
    SUM(CASE WHEN CATEGORY = 'RED' THEN WEEKLY ELSE 0 END) AS RED_WEEKLY,
    SUM(CASE WHEN CATEGORY = 'BLUE' THEN DAILY ELSE 0 END) AS BLUE_DAILY,
    SUM(CASE WHEN CATEGORY = 'BLUE' THEN WEEKLY ELSE 0 END) AS BLUE_WEEKLY,
    SUM(CASE WHEN CATEGORY = 'GREEN' THEN DAILY ELSE 0 END) AS GREEN_DAILY,
    SUM(CASE WHEN CATEGORY = 'GREEN' THEN WEEKLY ELSE 0 END) AS GREEN_WEEKLY,
    SUM(CASE WHEN CATEGORY = 'BLACK' THEN DAILY ELSE 0 END) AS BLACK_DAILY,
    SUM(CASE WHEN CATEGORY = 'BLACK' THEN WEEKLY ELSE 0 END) AS BLACK_WEEKLY,
    SUM(CASE WHEN CATEGORY = 'ORANGE' THEN DAILY ELSE 0 END) AS ORANGE_DAILY,
    SUM(CASE WHEN CATEGORY = 'ORANGE' THEN WEEKLY ELSE 0 END) AS ORANGE_WEEKLY
FROM yourTable
GROUP BY USER;
1 голос
/ 05 марта 2019

Требуется условная агрегация:

select user,
       sum(case when category = 'red' then daily else 0 end) as red_daily,
       sum(case when category = 'red' then weekly else 0 end) as red_weekly,
       sum(case when category = 'blue' then daily else 0 end) as blue_daily,
       sum(case when category = 'blue' then weekly else 0 end) as blue_weekly,
       sum(case when category = 'green' then daily else 0 end) as green_daily,
       sum(case when category = 'green' then weekly else 0 end) as green_weekly,
       sum(case when category = 'black' then daily else 0 end) as black_daily,
       sum(case when category = 'black' then weekly else 0 end) as black_weekly,
       sum(case when category = 'orange' then daily else 0 end) as orange_daily,
       sum(case when category = 'orange' then weekly else 0 end) as orange_weekly
from user_sales_unit
where date >= current_date
group by user;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...