插入带有附加分组依据的子查询的解决方案

时间:2019-05-17 17:34:19

标签: sql oracle-sqldeveloper

我正在尝试在Oracle SQL Developer中合并两个正常工作的SQL查询,但似乎无法让子程序的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 :(得分:0)

您似乎想要一个相关的子查询:

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;