2017-06-04 34 views
0

我使用此order dataset並試圖獲得2列數據,1998年訂單之一和1996年訂單之一以及每個賣家的名稱。使用CASE WHERE獲取特定年份的訂單

我的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; 

(抱歉,因爲我裝成sqlite的無YEAR()功能)

的一切不過,我剛開始爲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返回字符串。另外,我在CASE WHENs的末尾添加了一個ELSE 0以更新結果集:) – LittleBobbyTables

相關問題