2008
12.09

to join two table and rotate.

最近遇到一個 SQL 的問題,假設原本有兩個資料表如下:

Delares 資料表
________________________
declare_no  declare_name
  01        台北
  02        台中
  03        台南
  04        高雄
  05        墾丁

Members 資料表
________________________
name       type
某甲       02
某甲       03
某乙       05
某乙       03
某丙       04
某丁       05
路人       01
男人       02
女人       02

要把兩張資料表合併,並且統計各地人數,可以用這個方法:

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 來達成:

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

No Comment.

Add Your Comment
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>