0

2つのテーブルがあるとしましょう

Table1:
product_id, design1, design2
1              A        C
2              B        A

Table2:
product_id, value
1             10
2             10

ここで、すべての製品の特定のデザインのすべての値を合計したいと思います。

SELECT designA, SUM(value) FROM ( 
 SELECT b.design1 AS designA, SUM(value) AS value FROM table2 AS a LEFT JOIN table1 AS b ON a.product_id = b.product_id GROUP BY b.design1) AS T GROUP BY designA

It gives me this:
designA SUM(value)
  A           10
  B           10

問題は、ユーザーが table1 で design2 を指定した場合、design1 の値が何であれ、自動的に design2 に追加されることです。design2 が design1 列に存在しない場合、結果の新しい行になります。

望ましい結果は次のとおりです。

designA SUM(value)
  A            20
  B            10
  C            10
4

2 に答える 2

1
select y.designA, sum(value) from 

(select  a.design1 as designA, value from
Table1 as a
inner join Table2 as b
on
a.product_id = b.product_id

union all

select a.design2 as designA, value from
Table1 as a
inner join Table2 as b
on
a.product_id = b.product_id) as y 
group by y.designA

他の構成では試していませんが、テストデータに対しては機能しているようですが、それが何をしているのかを理解していれば、それを微調整できるはずです。

于 2012-04-16T18:56:40.427 に答える
0

design2 に基づく一致の UNION:

SELECT designA, SUM(value) FROM ( 
 SELECT b.design1 AS designA, SUM(value) AS value FROM table2 AS a LEFT JOIN table1 AS b ON a.product_id = b.product_id GROUP BY b.design1
UNION
 SELECT b.design2 AS designA, SUM(value) AS value FROM table2 AS a LEFT JOIN table1 AS b ON a.product_id = b.product_id GROUP BY b.design2
) AS T GROUP BY designA
于 2012-04-16T18:43:26.047 に答える