Re: [SQL ] 兩個資料表要產出數字 (count)

看板Database作者 (多想兩分鐘 = =")時間17年前 (2008/12/05 15:52), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/5 (看更多)
declare @t table(declare_no char(2),declare_name nvarchar(4)) insert @t values('01','定期申報') insert @t values('02','就職申報') insert @t values('03','補正申報') insert @t values('04','動態申報') insert @t values('05','信託申報') declare @t2 table(name nchar(2),type varchar(2)) insert @t2 values('某甲','02') insert @t2 values('某甲','03') insert @t2 values('某乙','05') insert @t2 values('某乙','03') insert @t2 values('某丙','04') insert @t2 values('某丁','05') insert @t2 values('路人','01') insert @t2 values('男人','02') insert @t2 values('女人','02') --select * from @t --select * from @t2 SELECT * FROM @t2 left join @t on type=declare_no select *, case declare_name when '定期申報' then 1 else 0 end[定期申報], case declare_name when '就職申報' then 1 else 0 end[就職申報], case declare_name when '補正申報' then 1 else 0 end[補正申報], case declare_name when '動態申報' then 1 else 0 end[動態申報], case declare_name when '信託申報' then 1 else 0 end[信託申報] FROM @t2 left join @t on type=declare_no select sum(case declare_name when '定期申報' then 1 else 0 end)[定期申報], sum(case declare_name when '就職申報' then 1 else 0 end)[就職申報], sum(case declare_name when '補正申報' then 1 else 0 end)[補正申報], sum(case declare_name when '動態申報' then 1 else 0 end)[動態申報], sum(case declare_name when '信託申報' then 1 else 0 end)[信託申報] FROM @t2 left join @t on type=declare_no /* 寫法想精簡一點可以查 pivot用法 我實驗的結果是效率沒比較好,也沒比較好讀… */ ※ 引述《roga (凝視)》之銘言: : 各位板友大家好,小弟想請教一個 SQL 的問題 : Delares 資料表 : ________________________ : declare_no declare_name : 01 定期申報 : 02 就職申報 : 03 補正申報 : 04 動態申報 : 05 信託申報 : Members 資料表 : ________________________ : name type : 某甲 02 : 某甲 03 : 某乙 05 : 某乙 03 : 某丙 04 : 某丁 05 : 路人 01 : 男人 02 : 女人 02 : 我想產生一張申報狀況的資料表,長得這樣: : 定期申報 就職申報 補正申報 動態申報 信託申報 : ______________________________________________________ : 人數 人數 人數 人數 人數 : 請問有好的作法嗎? : 現在的句子是 : SELECT : d.declare_no, d.declare_name, count(type) AS result : FROM Members, Declares d : WHERE type = d.declare_no : GROUP BY d.declare_no, d.declare_name : 但是產出的是 : declare_no declare_name result : 01 定期申報 1 : 02 就職申報 3 : 03 補正申報 2 : 04 動態申報 1 : 05 信託申報 2 : 但是這樣不太符合需求,希望對 SQL 熟悉的人可個忙 : 謝謝!我的資料庫是 SQL 2005 ,謝謝 ^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.61.172.157 ※ 編輯: grence 來自: 210.61.172.157 (12/05 15:57)

12/05 17:41, , 1F
謝謝,您真的很強 ^^
12/05 17:41, 1F

12/05 20:59, , 2F
恩~寫的語法滿實用的喔~高手
12/05 20:59, 2F
文章代碼(AID): #19EDsY-U (Database)
討論串 (同標題文章)
文章代碼(AID): #19EDsY-U (Database)