[SQL] Case 小應用

摘要:[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真的是個好用的東西啊