2013-03-07 3 views
0

두 가지 유형의 SQL 쿼리를 동일한 데이터를 반환합니다. 두 가지를 병합해야합니다. 조합을 사용하는 경우 두 번째 결과가 첫 번째 결과로 표시되지만 필요하지 않습니다. 병합 날짜가 필요합니다. 또는 하나의 쿼리에 두 개의 SQL 쿼리를 병합하는 방법이 있습니까?두 결과를 병합하는 방법

SELECT TO_CHAR(s.CR_DATE, 'DD') DAY, TO_CHAR(s.CR_DATE, 'MM') MONTH, count(*) total FROM SUSR s 
left outer join SUSR_ACCT sa on (s.SUSR_ID = sa.SUSR_ID) 
WHERE s.CR_DATE > '01-01-2012' AND s.CR_DATE < '01-01-2014' and sa.ACCT_ID = 123 
GROUP BY TO_CHAR(s.CR_DATE, 'DD'), TO_CHAR(s.CR_DATE, 'MM') 



SELECT TO_CHAR(s.CR_DATE, 'DD') DAY, TO_CHAR(s.CR_DATE, 'MM') MONTH, count(*) total FROM SUSR s 
WHERE s.CR_DATE > '01-01-2012' AND s.CR_DATE < '01-01-2014' and s.APP_ACCT_ID = 123 
GROUP BY TO_CHAR(s.CR_DATE, 'DD'), TO_CHAR(s.CR_DATE, 'MM') 
ORDER BY month, day 

고마워요!

enter image description here

답변

3

당신은이 개 결과를 집계 할 :

SELECT day, month, SUM(total) 
    FROM (/* first_query */ 
     UNION ALL 
     /* second_query */) 
GROUP BY day, month 
+0

고맙습니다! – Talha

1

내가 올바르게 병합의 배후 의도를 이해하는 것이 가정을, 당신은 GROUP BY의 두 번째 수준을 추가하고, 해당까지 총해야 이 같은 합계 :

SELECT DAY, MONTH, SUM(total) FROM (
    SELECT TO_CHAR(s.CR_DATE, 'DD') DAY, TO_CHAR(s.CR_DATE, 'MM') MONTH, count(*) total 
    FROM SUSR s 
    left outer join SUSR_ACCT sa on (s.SUSR_ID = sa.SUSR_ID) 
    WHERE s.CR_DATE > '01-01-2012' AND s.CR_DATE < '01-01-2014' and sa.ACCT_ID = 123 
    GROUP BY TO_CHAR(s.CR_DATE, 'DD'), TO_CHAR(s.CR_DATE, 'MM') 
UNION ALL 
    SELECT TO_CHAR(s.CR_DATE, 'DD') DAY, TO_CHAR(s.CR_DATE, 'MM') MONTH, count(*) total 
    FROM SUSR s 
    WHERE s.CR_DATE > '01-01-2012' AND s.CR_DATE < '01-01-2014' and s.APP_ACCT_ID = 123 
    GROUP BY TO_CHAR(s.CR_DATE, 'DD'), TO_CHAR(s.CR_DATE, 'MM') 
) src 
GROUP BY DAY, MONTH 
ORDER BY DAY, MONTH 

첫 번째 결과와 012,310의 1 2 5 행이있는 경우두 번째 행에는 출력에 1 2 9 행이 표시됩니다 (예 : 처음 두 열은 그룹화에 사용되고 마지막 열은 합산됩니다).

+0

고맙습니다! – Talha

관련 문제