0

同じデータを返す2種類のSQLクエリがあります。2つをマージする必要があります。Unionを使用すると、2番目の結果が最初の結果になりますが、これは必要ありません。マージ日が必要です。または2つのSQLをマージする方法はありますか。 1つのクエリにクエリしますか?

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

ありがとう !

ここに画像の説明を入力してください

4

2 に答える 2

3

次の2つの結果を集計します。

SELECT day, month, SUM(total)
  FROM ( /* first_query */
        UNION ALL
         /* second_query */)
 GROUP BY day, month
于 2013-03-07T11:22:35.850 に答える
1

マージ戦略の背後にある意図を正しく理解していると仮定すると、次のように、の2番目のレベルを追加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

1 2 5最初の結果に1 2 4行があり、2番目の結果に行がある場合1 2 9、出力に行が表示されます(つまり、最初の2つの列がグループ化に使用され、最後の列が合計されます)。

于 2013-03-07T11:28:55.563 に答える