Home [SQL] 根據月份統計商品別的數量 Sum()、Case(When Then Else)
Post
Cancel

[SQL] 根據月份統計商品別的數量 Sum()、Case(When Then Else)

範例

取得月份別的商品別販賣數量。
行(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)

This post is licensed under CC BY 4.0 by the author.