摘要:[SQL] Case 小應用
常常會有些廠商要我們製造出一些特別的報表形式,
有時會運用到要把本來直式的TABLE橫著長,
舉例來說:
[ID] [NAME]
------------------
A 小明
B 小華
C 小安
要如何製作成
[TITLE][NAME1][NAME2][NAME3]
----------------------------------------------
姓名 小華 小明 小安
---------------------------------------------
首先要先加一行自訂的排序
TABLE1
[ID] [NAME] [SORT]
---------------------------
A 小明 2
B 小華 1
C 小安 3
然後下SQL語法
SELECT '姓名' AS TITLE,
CASE WHEN SORT = '1' THEN NAME ELSE NULL END AS NAME1,
CASE WHEN SORT = '2' THEN NAME ELSE NULL END AS NAME2,
CASE WHEN SORT = '3' THEN NAME ELSE NULL END AS NAME3
FROM TABLE1
這樣就好了嗎?
其實還不夠,因為這樣會產生一個下面的TABLE
[TITLE][NAME1][NAME2][NAME3]
--------------------------------------------
姓名 NULL NULL NULL
姓名 小華 NULL NULL
姓名 NULL 小明 NULL
姓名 NULL NULL 小安
---------------------------------------------
以往我們要這樣做時都要加上SUM或COUNT來進行,
可是這個例子行不通,因為是CHAR不是INT
難道這樣就該結束了嗎?不,其實有個不錯的方法就是MAX,很妙吧
SELECT '姓名' AS TITLE,
MAX(CASE WHEN SORT = '1' THEN NAME ELSE NULL END) AS NAME1,
MAX(CASE WHEN SORT = '2' THEN NAME ELSE NULL END) AS NAME2,
MAX(CASE WHEN SORT = '3' THEN NAME ELSE NULL END) AS NAME3
FROM TABLE1
這樣就解決了,MAX真的是個好用的東西啊