DB2 Query множественный выбор и сумма по дате - PullRequest
0 голосов
/ 18 мая 2018

У меня есть 3 таблицы: ПУНКТЫ, ОДЕТАЛИ, ОИСТ.

  • ПУНКТЫ - список товаров, идентификатор - это ключевое поле
  • ОДЕТАЛИ - позиции каждого заказа, нетключевое поле
  • OHIST - представление, показывающее итоги заказов за последние годы по месяцам
ITEMS             ODETAILS                                 OHIST
+----+----------+  +-----+---------+---------+----------+  +---------+-------+
| ID |   NAME   |  | OID |  ODUE   | ITEM_ID | ITEM_QTY |  | ITEM_ID | M5QTY |
+----+----------+  +-----+---------+---------+----------+  +---------+-------+
| 10 + Widget10 |  | A33 | 1180503 |    10   |    100   |  |    10   |  1000 |
+----+----------+  +-----+---------+---------+----------+  +---------+-------+
| 11 + Widget11 |  | A33 | 1180504 |    11   |    215   |  |    11   |  1500 |
+----+----------+  +-----+---------+---------+----------+  +---------+-------+
| 12 + Widget12 |  | A34 | 1180505 |    10   |    500   |  |    12   |  2251 |
+----+----------+  +-----+---------+---------+----------+  +---------+-------+
| 13 + Widget13 |  | A34 | 1180504 |    11   |    320   |  |    13   |  4334 |
+----+----------+  +-----+---------+---------+----------+  +---------+-------+
                   | A34 | 1180504 |    12   |    450   |
                   +-----+---------+---------+----------+
                   | A34 | 1180505 |    13   |    125   |
                   +-----+---------+---------+----------+

Предположим, сегодня 2 мая 2018 г. (1180502).
Я хочу, чтобы мои результаты былиshow ID, NAME, M5QTY и SUM (ITEM_QTY), сгруппированные по дням в течение следующих 3 дней (D1, D2, D3)

Desired Result
+----+----------+--------+------+------+------+
| ID |   NAME   | M5QTY  |  D1  |  D2  |  D3  |
+----+----------+--------+------+------+------+
| 10 | Widget10 |  1000  |  100 |      |  500 |
+----+----------+--------+------+------+------+
| 11 | Widget11 |  1500  |      |  535 |      |
+----+----------+--------+------+------+------+
| 12 | Widget12 |  2251  |      |  450 |      |
+----+----------+--------+------+------+------+
| 13 | Widget13 |  4334  |      |      |  125 |
+----+----------+--------+------+------+------+

Таким образом я конвертирую ODUE в дату

DATE(concat(concat(concat(substr(char((ODETAILS.ODUE-1000000)+20000000),1,4),'-'), concat(substr(char((ODETAILS.ODUE-1000000)+20000000),5,2), '-')), substr(char((ODETAILS.ODUE-1000000)+20000000),7,2)))

1 Ответ

0 голосов
/ 18 мая 2018

Попробуйте это (вы можете добавить нужные объединения)

SELECT  ITEM_ID
,     SUM(CASE WHEN ODUE = INT(CURRENT DATE) - 19000000 + 1 THEN ITEM_QTY ELSE 0 END) AS D1
,     SUM(CASE WHEN ODUE = INT(CURRENT DATE) - 19000000 + 2 THEN ITEM_QTY ELSE 0 END) AS D2
,     SUM(CASE WHEN ODUE = INT(CURRENT DATE) - 19000000 + 3 THEN ITEM_QTY ELSE 0 END) AS D3
FROM
    ODETAILS
GROUP BY
    ITEM_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...