顯示具有 CASE 標籤的文章。 顯示所有文章
顯示具有 CASE 標籤的文章。 顯示所有文章

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

2015年6月28日 星期日

SQL練習:CASE

PTT DataBase版 #192AKCJG

table:
name  A  B
1         1  3
2         3  3
3         2  2
4         1  4
5         5  2
6         5  4
7         3  2

假設原始資料為上表
我想將找出A跟B欄位值相同的為一群組
根據A,B欄位值的大小~以群組由大至小排序的即結果希望如下~

result table:(--# 數字相同帶表同群組)
name  A  B
6         5  4  -- 5
5         5  2  -- 5
4         1  4  -- 4
2         3  3  -- 3
7         3  2  -- 3
1         1  3  -- 3
3         2  2  -- 2


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
--建立測試資料表
CREATE TABLE AA
	(
	NAME nchar(10) NULL,
	A int NULL,
	B int NULL
	)  ON [PRIMARY]
	
	insert into AA (NAME,A,B) values ('1',1,3)
	insert into AA (NAME,A,B) values ('2',3,3)
	insert into AA (NAME,A,B) values ('3',2,2)
	insert into AA (NAME,A,B) values ('4',1,4)
	insert into AA (NAME,A,B) values ('5',5,2)
	insert into AA (NAME,A,B) values ('6',5,4)
	insert into AA (NAME,A,B) values ('7',3,2)

解法

1
2
3
select *
from AA
order by (case when A>B then A else B end) desc ,B desc