1

名前と残高を持つ2つのテーブルがありますex

表 A

  Name    | Amount
-----------------------                           
  Abraham | 500  
  Abraham | 100  
  George  | -200  
  George  | 200  
  Thomas  | 300  
  Thomas  | -100

表 B

  Name    | Amount
-------------------------                           
  Abraham | 100  
  Abraham | 200  
  George  | -200  
  George  | 50  
  Thomas  | 400  
  Thomas  | 300   
  Albert  | -100       
  Albert  | -200 

したがって、2 つのテーブルを追加する必要があります。すべての名前には正と負があります。テーブル A とテーブル B に同じ量の一意の名前があるかどうかはわかりません。クエリを実行すると

Select sum(Amount)  
from table_A  
group by Name  

このクエリは、テーブル A またはテーブル B に対して個別に機能しますが、このようなクエリを実行しようとすると、法外な数値が得られます

Select a.Name , sum(a.amount) + sum(b.amount)
from table_A full outer join table_B b on a.Name = b.Name
group by a.Name

1 つのクエリでこれを行う方法はありますか?

4

3 に答える 3

1

私のクエリは、を使用して正常に動作しUNION ALLます。以下のクエリと SQL Fiddle Demo を参照してください。

SELECT Name,SUM(Amount)Amount FROM(
SELECT Name, Amount
    FROM TableA
UNION ALL
SELECT Name, Amount
    FROM TableB) AS A GROUP BY Name

SQL フィドルのデモはこちら

于 2015-02-18T05:57:48.187 に答える
0

結合を使用するには、以下に示すネストされたサブクエリのように、各テーブルを個別の式で要約することにより、現在発生しているデカルト積を回避する必要があります。

SELECT aa.name, COALESCE(aa.amount,0) + COALESCE (bb.amount,0)
FROM ( 
      SELECT a.name, SUM(a.amount) AS amount 
      FROM TableA a GROUP BY a.name
 ) aa
FULL OUTER JOIN
(
      SELECT b.name, SUM(b.amount) AS amount 
      FROM TableB b GROUP BY b.name
 ) bb
ON aa.name = bb.name
;
于 2015-02-18T05:32:58.833 に答える
0

ORACLEで私はするだろう

SELECT Name, sum(Amount) AS Amount FROM
  (SELECT Name, Amount
    FROM table_A  
UNION ALL
  SELECT Name, Amount
    FROM table_B  )
GROUP BY Name

sybase で同様のことができるか試してみてください。

そして、インライン ビューから、「実際の」ビューを作成します。

私があなたの意図を理解していなかった場合、私は非常に申し訳ありません.

于 2015-02-18T05:23:39.407 に答える