Решение для вставки подзапроса с дополнительной группой - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь объединить два рабочих SQL-запроса в Oracle SQL Developer, но, похоже, не получается, чтобы сабвуфер Group By работал хорошо.Я хочу / ожидаю увидеть отдельные итоги для каждой строки, но я получаю общую сумму для всех строк.

Я попытался добавить второй запрос как подзапрос.

Запрос 1:

SELECT SOURCE,   
sum(case when status = 'C1' then 1 else 0 end) as "C1",
sum(case when status = 'C2' then 1 else 0 end) as "C2",
sum(case when status = 'C3' then 1 else 0 end) as "C3",
sum(case when status = 'C4' then 1 else 0 end) as "C4",
sum(case when status = 'C5' then 1 else 0 end) as "C5" 
FROM TABLE.req 
GROUP BY SOURCE 
ORDER BY SOURCE;

Запрос 2, добавляемый к вышеупомянутому:

SELECT SOURCE, COUNT(REQ.SOURCE) AS "Done in 7 Days"
FROM TABLE.req REQ
    JOIN TABLE.audit AUD ON REQ.ROW_ID = AUD.RECORD_ID
WHERE (AUD.LAST_UPD - REQ.CREATED) <= 7 
    AND REQ.STATUS = 'Complete'
    GROUP BY SOURCE;

Пробный подзапрос:

SELECT SOURCE,   
sum(case when status = 'C1' then 1 else 0 end) as "C1",
sum(case when status = 'C2' then 1 else 0 end) as "C2",
sum(case when status = 'C3' then 1 else 0 end) as "C3",
sum(case when status = 'C4' then 1 else 0 end) as "C4",
sum(case when status = 'C5' then 1 else 0 end) as "C5"    
(SELECT SOURCE, COUNT(REQ.SOURCE) 
FROM TABLE.req REQ
    JOIN TABLE.audit AUD ON REQ.ROW_ID = AUD.RECORD_ID
WHERE (AUD.LAST_UPD - REQ.CREATED) <= 7 
    AND REQ.STATUS = 'Complete'
GROUP BY SOURCE) AS "Done in 7"
FROM TABLE.req 
GROUP BY SOURCE 
ORDER BY SOURCE;


Query 1 returns:

A   0   0   0   0   0
B   0   0   3026    26  2461
C   0   0   0   0   0
D   3   39  2   1   19
E   0   0   61156   0   79430

Query 2 returns:

A   2906
B   10
C   28
D   7
E       0

АКТУАЛЬНО: Подзапрос возвращает дополнительный столбец, НО он подсчитывается

A   0   0   0   0   0           2951
B   0   0   3026    26  2461    2951
C   0   0   0   0   0           2951
D   3   39  2   1   19          2951
E   0   0   61156   0   79430   2951

ОЖИДАЕМЫЙ: Подзапрос возвращает дополнительный столбец, НО он подсчитывается

A   0   0   0   0   0           2906
B   0   0   3026    26  2461    10
C   0   0   0   0   0           28
D   3   39  2   1   19          7
E   0   0   61156   0   79430   0

1 Ответ

0 голосов
/ 17 мая 2019

Похоже, вы хотите коррелированный подзапрос:

SELECT SOURCE,   
       sum(case when status = 'C1' then 1 else 0 end) as "C1",
       sum(case when status = 'C2' then 1 else 0 end) as "C2",
       sum(case when status = 'C3' then 1 else 0 end) as "C3",
       sum(case when status = 'C4' then 1 else 0 end) as "C4",
       sum(case when status = 'C5' then 1 else 0 end) as "C5",  
       (SELECT COUNT(*) 
        FROM TABLE.req REQ r2 JOIN
             TABLE.audit a
             ON r2.ROW_ID = a.RECORD_ID
       WHERE r2.SOURCE = r.SOURCE AND
             (a.LAST_UPD - r2.CREATED) <= 7 AND
             r2.STATUS = 'Complete'
      )
FROM TABLE.req  r
GROUP BY SOURCE 
ORDER BY SOURCE;
...