11

2 つの異なるテーブルからいくつかの列の合計を取得したい (これらのテーブルは同じ構造を共有しています)。

1 つのテーブルのみを考慮する場合、次のようなクエリを記述します。

SELECT MONTH_REF, SUM(amount1), SUM(amount2)
    FROM T_FOO
    WHERE seller = XXX
    GROUP BY MONTH_REF;

ただし、テーブル T_BAR のデータも操作してselect、次の列を返すクエリを作成したいと考えています。

  • MONTH_REF
  • SUM(T_FOO.amount1) + SUM(T_BAR.amount1)
  • SUM(T_FOO.amount2) + SUM(T_BAR.amount2)

の値でグループ化されたすべてのものMONTH_REF

特定の のレコードMONTH_REFは 1 つのテーブルでは見つかりますが、他のテーブルでは見つからないことに注意してください。T_FOO.amount1 + 0この場合、 (または)の合計を取得したいと思い0 + T_BAR.amount1ます。

この情報を取得するために SQL クエリを作成するにはどうすればよいですか?

参考までに、私のデータベースは Oracle 10g です。

4

5 に答える 5

12

グループ化する前にテーブルを結合できます(ちなみに、これはOracleにあります):

SELECT t.month_ref, SUM(t.amount1), SUM(t.amount2)
  FROM (SELECT month_ref, amount1, amount2
          FROM T_FOO
         WHERE seller = XXX
         UNION ALL
        SELECT month_ref, amount1, amount2
          FROM T_BAR
         WHERE seller = XXX
         ) t
 GROUP BY t.month_ref

また、テーブルを Seller フィールドと結合し、後でフィルター処理することもできます (より高度なロジックが必要な場合)。

 SELECT t.month_ref, SUM(t.amount1), SUM(t.amount2)
   FROM (SELECT month_ref, amount1, amount2, seller
           FROM T_FOO
          UNION ALL
         SELECT month_ref, amount1, amount2, seller
           FROM T_BAR) t
  where t.seller = XXX
  GROUP BY t.month_ref
于 2009-09-07T09:16:39.047 に答える
2

ユニオンを使ってみましたか?

SELECT MONTH_REF, SUM(amount1), SUM(amount2)
FROM (
  SELECT MONTH_REF, SUM(amount1) AS amount1, SUM(amount2) as amount2
      FROM T_FOO
      WHERE seller = XXX
      GROUP BY MONTH_REF
  UNION ALL SELECT MONTH_REF, SUM(amount1), SUM(amount2)
      FROM T_BAR
      WHERE seller = XXX
      GROUP BY MONTH_REF
  ) tmp
GROUP BY MONTH_REF
于 2009-09-07T08:40:31.367 に答える
1

私はついにLievenの答えを使ってこれを機能させました。

正しいコードは次のとおりです(amount1 = ...私の環境では機能しておらず、クエリに多すぎ;ます):

SELECT MONTH_REF, SUM(sumAmount1), SUM(sumAmount2)
FROM (
  SELECT MONTH_REF, SUM(amount1) as sumAmount1, SUM(amount2) as sumAmount1
      FROM T_FOO
      WHERE seller = XXX
      GROUP BY MONTH_REF
  UNION ALL SELECT MONTH_REF, SUM(amount1), SUM(amount2)
      FROM T_BAR
      WHERE seller = XXX
      GROUP BY MONTH_REF
  ) tmp
GROUP BY MONTH_REF
于 2009-09-07T09:08:00.867 に答える
1

または、外部結合も機能するはずです。

SELECT month_ref, 
       SUM(t_foo.amount1) + SUM(t_bar.amount1), 
       SUM(t_foo.amount2)+SUM(t_bar.amount2)
FROM   t_foo FULL OUTER JOIN t_bar
       ON t_foo.month_ref = t_bar.month_ref
GROUP BY month_ref
于 2009-09-07T08:47:35.487 に答える
-1
SELECT (SELECT SUM(amount) from debit) as debitamounts, (SELECT SUM(amount) from credit) as creditamounts
于 2015-11-25T16:17:26.937 に答える