2017-10-23 4 views
-3

商品価格と数量の合計を選択するSQLクエリがあります。私は 私のSQLクエリは、このように..です原価がゼロでない場合は、それを合計する原価を使用したい:ユーザsqlカラムaがbの場合0その他の場合b

SELECT SUM(price*quantity) as sum FROM `table` WHERE invoice = '1'; 

同じテーブルが(ID、価格、cost_price、数量)が、目的はにありますゼロでない場合はcost_priceを使用し、それ以外の場合は価格を使用します。そう

このようなクエリを探していた場合:

SELECT SUM(((cost_price == 0) ? price : cost_price) *quantity) as sum FROM `table` WHERE invoice = '1'; 
+2

あなたはどのRDBMを使用していますか? (*あなたの質問に*タグを付けてください) – Igor

答えて

1

を使用することができます...(SQL Serverなど)

SELECT SUM(COALESCE(NULLIF(cost_price,0),price) * quantity) AS sum 
FROM [table] 
0

条件付き集計で何をしたい達成される:ちょうど以下のようなロジックのためのケース式を使用し

SUM((CASE WHEN cost_price = 0 THEN price ELSE cost_price END) * quantity) as sum 
0

。以下の構文は、ほとんどのDBMSで

SELECT SUM((case cost_price when 0 then price else cost_price end) * quantity)) as sum 
FROM `table` 
WHERE invoice = '1'; 
+0

Case _expression_。 (戻り値があります) – jarlh

+0

@jarlh正しいです。更新されました。 – tommyO

0

を動作するはずですあなたは(あなたがバッククォートで識別子を逃れる方法に従って、RDBMSである)MySQLではifを使用することができます。

SELECT SUM(if(cost_price = 0, price, cost_price) * quantity) as sum 
FROM `table` 
WHERE invoice = '1'; 
0

は、SQL Serverを使用している場合あなたはまた、これを行うことができますIIF

SELECT SUM(IIF(cost_price=0,price,cost_price) * quantity) AS SUM 
FROM `table` 
WERE invoice = '1'; 
+0

SQL Serverとバックティック? – jarlh

+0

@jarlh - 私はそれがテーブル名のプレースホルダであると仮定しました。 – Igor

関連する問題