Я абсолютно не могу понять, что я делаю неправильно.
Мои данные здесь близки, но мои подзапросы V2 и V3 не возвращают правильные данные, и я думаю, что это основано на том факте, что я пытаюсь разделить на группы по сумме, и мне кажется, что он использует тот же номер strCount через доску.
Запрос:
WITH T (employee, manager, GROUP, detail1, detail2, strCount, QUANT, LAST_SHIP_DATE) AS (
VALUES (21177, 165, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY),
(19445, 182, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY),
(20949, 340, 4867, 2878, 29, 1, 2, CURRENT DATE - 10 DAY),
(21347, 353, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY),
(23068, 353, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY),
(17195, 353, 4867, 2878, 29, 1, 6, CURRENT DATE - 10 DAY),
(23040, 353, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY),
(5620, 380, 4867, 2878, 29, 1, 4, CURRENT DATE - 10 DAY),
(23009, 380, 4867, 2878, 29, 1, 3, CURRENT DATE - 10 DAY),
(13529, 390, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY),
(22706, 394, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY),
(17049, 394, 4867, 2878, 29, 1, 4, CURRENT DATE - 10 DAY),
(17879, 397, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY),
(21320, 445, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY),
(21231, 457, 4867, 2878, 29, 1, 1, CURRENT DATE - 10 DAY)
)
SELECT T.employee, T.manager, T.GROUP, T.detail1, T.detail2, T.strCount, T.QUANT
, COALESCE(T1.V1, 0) V1, COALESCE(T2.V2, 0) V2, COALESCE(T3.V3, 0) V3
FROM T
LEFT JOIN (
SELECT employee, GROUP, detail1, detail2, SUM(QUANT)/SUM(strCount)*12 V1
FROM T
WHERE last_ship_date > CURRENT_DATE - 30 DAYS
GROUP BY employee, GROUP, detail1, detail2,strCount
) T1 ON T1.employee=T.employee AND T1.GROUP=T.GROUP AND T1.detail1=T.detail1 AND T1.detail2=T.detail2
LEFT JOIN (
SELECT manager, GROUP, detail1, detail2, SUM(QUANT)/SUM(strCount)*12 V2
FROM T
WHERE last_ship_date > CURRENT_DATE - 30 DAYS
GROUP BY manager, GROUP, detail1, detail2,strCount
) T2 ON T2.manager=T.manager AND T2.GROUP=T.GROUP AND T2.detail1=T.detail1 AND T2.detail2=T.detail2
LEFT JOIN (
SELECT GROUP, detail1, detail2, SUM(QUANT)/SUM(strCount)*12 V3
FROM T
WHERE last_ship_date > CURRENT_DATE - 30 DAYS
GROUP BY GROUP, detail1, detail2,strCount
) T3 ON T3.GROUP=T.GROUP AND T3.detail1=T.detail1 AND T3.detail2=T.detail2;
Это дает мне
employee | manager | group | detail1 | detail2 | strCount | quant | V1 | V2 | V3
================================================================================
21177 | 165 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 12
19445 | 182 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 12
20949 | 340 | 4867 | 2878 | 29 | 1 | 2 | 24 | 24 | 12
21347 | 353 | 4867 | 2878 | 29 | 1 | 1 | 12 | 24 | 12
23068 | 353 | 4867 | 2878 | 29 | 1 | 1 | 12 | 24 | 12
17195 | 353 | 4867 | 2878 | 29 | 1 | 6 | 72 | 24 | 12
23040 | 353 | 4867 | 2878 | 29 | 1 | 1 | 12 | 24 | 12
5620 | 380 | 4867 | 2878 | 29 | 1 | 4 | 48 | 36 | 12
23009 | 380 | 4867 | 2878 | 29 | 1 | 3 | 36 | 36 | 12
13529 | 390 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 12
22706 | 394 | 4867 | 2878 | 29 | 1 | 1 | 12 | 24 | 12
17049 | 394 | 4867 | 2878 | 29 | 1 | 4 | 48 | 24 | 12
17879 | 397 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 12
21320 | 445 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 12
21231 | 457 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 12
Но ожидая:
employee | manager | group | detail1 | detail2 | strCount | quant | V1 | V2 | V3
==================================================================================
21177 | 165 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 22.4
19445 | 182 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 22.4
20949 | 340 | 4867 | 2878 | 29 | 1 | 2 | 24 | 24 | 22.4
21347 | 353 | 4867 | 2878 | 29 | 1 | 1 | 12 | 27 | 22.4
23068 | 353 | 4867 | 2878 | 29 | 1 | 1 | 12 | 27 | 22.4
17195 | 353 | 4867 | 2878 | 29 | 1 | 6 | 72 | 27 | 22.4
23040 | 353 | 4867 | 2878 | 29 | 1 | 1 | 12 | 27 | 22.4
5620 | 380 | 4867 | 2878 | 29 | 1 | 4 | 48 | 42 | 22.4
23009 | 380 | 4867 | 2878 | 29 | 1 | 3 | 36 | 42 | 22.4
13529 | 390 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 22.4
22706 | 394 | 4867 | 2878 | 29 | 1 | 1 | 12 | 30 | 22.4
17049 | 394 | 4867 | 2878 | 29 | 1 | 4 | 48 | 30 | 22.4
17879 | 397 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 22.4
21320 | 445 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 22.4
21231 | 457 | 4867 | 2878 | 29 | 1 | 1 | 12 | 12 | 22.4
Как я могу правильно изменить это так, чтобы группировки сотрудников, менеджера и итога отражали сгруппированную сумму strCount, а также сгруппированную сумму кванта?
Обновление:
Логика здесь такая
Я хочу получить то же количество строк с соответствующей информацией, как и сейчас, но мои столбцы V1, V2 и V3 должны выглядеть следующим образом:
V1: сумма количества для группировки сотрудник / группа / деталь1 / деталь2, деленная на сумму strCount той же группировки (в настоящее время возвращается правильно)
V2: сумма количества для группировки менеджер / группа / detail1 / detail2, деленная на сумму strCount на ту же группу
V3: сумма общего количества для группы / детали1 / детали2, деленная на сумму общей суммы strCount на ту же группу