2012-12-01 15 views
6

SQLクエリに問題があります。
私が持っているにtableA:異なるテーブルの和の合計

productA priceA 
P1  18 
P2  35 
P1  22 
P2  19 

ともTABLEB:

productB priceB 
P1  3 
P2  15 
P1  80 
P2  96 

2つのテーブルから2つの製品の合計を結果として私が欲しいです。

product price 
P1  123 
P2  165 

2つのテーブルの合計を合計します。
このクエリを試していますが、間違っています。

SELECT productA, 
    (SELECT SUM(priceA) FROM tableA GROUP BY productA), 
    (SELECT SUM(priceB) FROM tableB GROUP BY productB) 
FROM tableA, tableB 
WHERE productA = productB 
GROUP BY productA 

私を助けてください。

select product 
,  sum(price) 
from (
     select productA as product 
     ,  priceA as price 
     from TableA 
     union all 
     select productB 
     ,  priceB 
     from TableB 
     ) as SubQueryAlias 
group by 
     product 
+0

"それは間違っている"という意味を説明できますか?クエリは何を生成しますか? 2つのサブ選択が個々の製品の正しい結果を返しますか? –

+0

あなたのエンジンは何ですか? – Sebas

答えて

3

あなたは、テーブルをマージするunionを使用することができ、かつgroup by

select 
    product, 
    sum(price) 
from (
    select productA as product, sum(priceA) as price from tableA group by 1 
    union all 
    select productB, sum(priceB) from tableB group by 1 
) 
group by 1 
+0

それは動作します!ありがとうございました! :) – vaka

+0

あなたは 'すべての組合 'を持っているので私はあなたをアップしています。 –

1

これは、和の合計文字通りです:結果の

+1

この解決策は、 'union'が重複を削除するため正しくありません。あなたは 'all union 'を持っているはずです。 –

+0

@GordonLinoffくそー、そうだよ!私は通常、「すべての組合」のナチです。これを指摘してくれてありがとう。 (私はクエリを修正しました) – Bohemian

0

参加しているため、自然のように思えますこの問題に近づくには、unionではなくjoinの解決策があります。それは、最初のサブクエリでデータを集計し、その後一緒に結果を結合します。私はfull outer join場合にはテーブルが製品の異なるセットを持って使用してい

select coalesce(a.productA, b.productB) as product, 
     coalesce(a.PriceA, 0) + coalesce(b.PriceB, 0) as price 
from (select productA, sum(PriceA) as PriceA 
     from TableA 
     group by productA 
    ) a full outer join 
    (select productB, sum(PriceB) as PriceB 
     from TableB 
     group by productB 
    ) b 
    on a.productA = b.prodctB 

。その結果、私はselectステートメントに​​3210が必要です。

関連する問題