最近遇到一個 SQL 的問題,假設原本有兩個資料表如下:
Delares 資料表 ________________________ declare_no declare_name 01 台北 02 台中 03 台南 04 高雄 05 墾丁 Members 資料表 ________________________ name type 某甲 02 某甲 03 某乙 05 某乙 03 某丙 04 某丁 05 路人 01 男人 02 女人 02
要把兩張資料表合併,並且統計各地人數,可以用這個方法:
1 2 3 4 5 6 7 |
SELECT Declares.declare_no, Declares.declare_name, COUNT(Members.type) AS result FROM Members, Declares WHERE Members.type = Declares.declare_no GROUP BY Declares.declare_no, Declares.declare_name |
但是產出的是
declare_no declare_name result ___________________________________ 01 台北 1 02 台中 3 03 台南 2 04 高雄 1 05 墾丁 2
可是我想要以下這種結果,這樣對報表來說比較直覺。
表頭 台北 台中 台南 高雄 墾丁 ______________________________________ 資料 人數 人數 人數 人數 人數
可是我不知道該怎麼下語法,所以就問了一下,很感謝 grence@ptt 幫我解答這個問題。
他是用 CASE WHEN 來達成:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT SUM(CASE declare_no WHEN '台北' THEN 1 ELSE 0 END)[台北], SUM(CASE declare_no WHEN '台中' THEN 1 ELSE 0 END)[台中], SUM(CASE declare_no WHEN '台南' THEN 1 ELSE 0 END)[台南], SUM(CASE declare_no WHEN '高雄' THEN 1 ELSE 0 END)[高雄], SUM(CASE declare_no WHEN '墾丁' THEN 1 ELSE 0 END)[墾丁] -- 當然,這邊可以再加 column FROM Members LEFT JOIN Declares ON TYPE=declare_no |