2015年6月29日 星期一

SQL練習:CASE (2)

PTT DataBase版 #1HwemKch

Table A

類別      名稱        閱讀狀態   我的最愛
---------------------------------
小說   笑傲江湖          N          Y
小說   鹿鼎記             Y          N
小說   碧血劍             Y          N
小說   書劍恩仇錄       Y          N


轉為

Table B

類別  總筆數  已閱讀完筆數   喜愛筆數
--------------------------------------------
小說       4                3                1


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
--建立測試資料表
CREATE TABLE A
 (
 category varchar(10) NULL,
 name nvarchar(20) NULL,
 reading varchar(10) NULL,
 mylove varchar(10) NULL
 )  ON [PRIMARY]

 insert into A (category,name,reading,mylove) values ('小說','笑傲江湖','N','Y')
 insert into A (category,name,reading,mylove) values ('小說','鹿鼎記','Y','N')
 insert into A (category,name,reading,mylove) values ('小說','碧血劍','Y','N')
 insert into A (category,name,reading,mylove) values ('小說','書劍恩仇錄','Y','N')

解法

利用case判斷Y進行加總

1
2
3
4
5
6
select category as 類別,
 COUNT(*) as 總筆數,
 sum ( case when reading='Y' then 1 else 0 end) as 已閱讀完筆數, --若reading=Y回傳1,將所有值加總
 sum ( case when mylove='Y' then 1 else 0 end) as 已閱讀完筆數 --若mylove=Y回傳1,將所有值加總
from A
group by category

沒有留言:

張貼留言