2017-10-11 4 views
0

私は、次のコードを持っている:SQLは - 同じテーブル内の値を乗算し

SELECT ConsumerID, Product, 
 
     (frequency * Product_Value) as Value_productA 
 
     (frequency * Product_Value) as Value_productB 
 
     (frequency * Product_Value) as value_productC 
 
From Table1

table1に以下のようになります。

ConsumerID | Product | Product_value | frequency | value_productA | value_productB | value_productC 
 
----------------------------------------------------------------- 
 
001 | productA | 5$ | 2 | | | | 
 
001 | productB | 7$ | 4 | | | | 
 
001 | productC | 9$ | 6 | | | | 
 
002 | productA | 5$ | 2 | | | | 
 
002 | productB | 7$ | 4 | | | | 
 
002 | productC | 9$ | 6 | | | | 
 

 

 
Expected Bevaviour: 
 

 
ConsumerID | Product | Product_value | frequency | value_productA | value_productB | value_productC 
 
----------------------------------------------------------------- 
 
001 | productA | 5$ | 2 |10$ | | | 
 
001 | productB | 7$ | 4 | |28$ | | 
 
001 | productC | 9$ | 6 | | |54$ | 
 
002 | productA | 5$ | 2 | 10$| | | 
 
002 | productB | 7$ | 4 | |28$ | | 
 
002 | productC | 9$ | 6 | | |54$ | 
 

 

 
Current behaviour: 
 

 
ConsumerID | Product | Product_value | frequency | value_productA | value_productB | value_productC 
 
----------------------------------------------------------------- 
 
001 | productA | 5$ | 2 |10$ |10$ |10$ | 
 
001 | productB | 7$ | 4 |28$ |28$ |28$ | 
 
001 | productC | 9$ | 6 |54$ |54$ |54$ | 
 
002 | productA | 5$ | 2 |10$ |10$ |10$ | 
 
002 | productB | 7$ | 4 |28$ |28$ |28$ | 
 
002 | productC | 9$ | 6 |54$ |54$ |54$ |

アイデアをtを計算することです彼は各クライアントのために値する&プロダクト - 意味頻度* product_value。サンプルコードは、SUMを正しく計算しますが、value_productXフィールドではなく、すべてのfielsに書き込みます。

答えて

0

あなたは、このようなcaseなどいくつかの条件付きロジック、必要があります。

SELECT ConsumerID, Product, 
     (case when product = 'productA' then (frequency * Product_Value) end) as Value_productA 
     (case when product = 'productB' then (frequency * Product_Value) end) as Value_productB 
     (case when product = 'productC' then (frequency * Product_Value) end) as value_productC 
From Table1; 

通常、同様の質問がされたときに、目標はconsumeridごとに1つの行を取得することですが。その場合、集計が必要です。

select ConsumerID, 
     sum(case when product = 'productA' then (frequency * Product_Value) end) as Value_productA 
     sum(case when product = 'productB' then (frequency * Product_Value) end) as Value_productB 
     sum(case when product = 'productC' then (frequency * Product_Value) end) as value_productC 
From Table1 
group by ConsumerID 
+0

偉大な、それは問題を解決し、解決しました!もう一度ありがとう – Christian

関連する問題