範例
取得月份別的商品別販賣數量。
行(Column)設定為月份別(2006/4、2006/5、2006/6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
select B.商品名稱,
sum(
case
when datepart(yyyy, [處理日]) = 2006 and datepart(mm, [處理日]) = 4
then A.數量
else 0
end
) "2006/4",
sum(
case
when datepart(yyyy, [處理日]) = 2006 and datepart(mm, [處理日]) = 5
then A.數量
else 0
end
) "2006/5",
sum(
case
when datepart(yyyy, [處理日]) = 2006 and datepart(mm, [處理日]) = 6
then A.數量
else 0
end
) "2006/6"
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
group by B.商品名稱
執行結果
1
2
3
4
5
6
7
8
9
10
商品名稱 2006/4 2006/5 2006/6
15吋液晶螢幕 0 5 1
17吋螢幕 0 5 0
19吋螢幕 3 0 0
HUB 0 0 5
印表機 1 0 0
桌上型電腦 5 1 0
掃描器 1 0 0
筆記型電腦 1 2 5
網路卡 0 0 2
我的思路
1.先組預期的外觀
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
select B.商品名稱,
sum(A.數量) "2006/4", -- TODO: 加上條件case (when then else)
sum(A.數量) "2006/5", -- TODO
sum(A.數量) "2006/6" -- TODO
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
group by B.商品名稱
/*
商品名稱 2006/4 2006/5 2006/6
15吋液晶螢幕 6 6 6
17吋螢幕 5 5 5
19吋螢幕 3 3 3
HUB 5 5 5
印表機 1 1 1
桌上型電腦 6 6 6
掃描器 1 1 1
筆記型電腦 8 8 8
網路卡 2 2 2
*/
2. 組外觀 Sum()+ Case
sum(A.數量) “2006/4”
1
2
3
4
5
6
7
sum(
case
when "判斷條件:販賣日期為2006/4" --使用datepart()分月取得該年、月
then A.數量 --要加總的欄位
else 0 --沒有符合條件就給0
end
) "2006/4"
3. Sum()加上條件 Case (When Else)
Sum()裡使用Case When Else判斷去計算每月的販賣的數量。
1
2
3
4
5
6
7
8
9
10
11
12
13
select B.商品名稱,
sum(
case
when datepart(yyyy, [處理日]) = 2006 and datepart(mm, [處理日]) = 4
then A.數量 --要加總的欄位
else 0 --沒有符合條件,就為0
end
) "2006/4",
sum(A.數量) "2006/5", -- TODO
sum(A.數量) "2006/6" -- TODO
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
group by B.商品名稱
[SQL] 日期的加工 Datepart()
[SQL] 群組化 Group By、計數Count()、求和Sum()
[SQL] 條件判斷 Case (When Then Else)