2017-06-04 11 views
0

order datasetを使用しており、1998年の注文の1つと1996年の注文の1つを各売り手の名前と共に2列取得しようとしています。CASE WHEN

これまで

マイSQLです:

select 
    salesperson.name, 
    case when strftime('%Y', order_date) = 1998 then sum(orders.number) end as sales_in_1998, 
    case when strftime('%Y', order_date) = 1996 then sum(orders.number) end as sales_in_1996 
from salesperson 
left join orders on orders.salesperson_id = salesperson.id 
group by salesperson.name; 

(ごめんなしYEAR()機能私はsqliteの中にそれをロードされたので)

しかし、私はすべてのためにNULLを取得しています。私は間違って何をしていますか?

Here is my SQLfiddleデータがロードされています。

答えて

2
  1. CASEは、SUM()の内部に入ります。
  2. 文字列比較には一重引用符を使用してください。

結果のクエリ:

select sp.name, 
     sum(case when strftime('%Y', o.order_date) = '1998' then o.number 
      end) as sales_in_1998, 
     sum(case when strftime('%Y', o.order_date) = '1996' then o.number 
      end) as sales_in_1996 
from salesperson sp left join 
    orders o 
    on o.salesperson_id = sp.id 
group by sp.name; 
+0

ナイス!ありがとう。私はSTRFTIMEが文字列を返すのを忘れていました。また、結果セットを整理するために、ケース・エンドの最後にELSE 0を追加しました:) – LittleBobbyTables

関連する問題