Re: [SQL ] 兩個資料表要產出數字 (count)
※ 引述《sai25 (hyde)》之銘言:
: 請問一下PIVOT用法
: select * from (select B.declare_name,count(A.type) 人數 from @t2 A,@t B
: where A.type = B.declare_no group by B.declare_name,B.declare_no ) as x pivot
: (sum(人數) for declare_name in
: ([定期申報],[就職申報],[補正申報],[動態申報],[信託申報])) AS PVT
: 以上欄位都要把[XXXX]打出來嗎?
: 有沒有辦法不用打出欄位 [定期申報],[就職申報],[補正申報],[動態申報],[信託申報]
沒有,但可以動態產生欄位....
declare @s nvarchar(max)
select @s=isnull(@s+',','')+quotename([declare_name])
from @t
group by[declare_name]
這樣 @s的內容是"[定期申報],[就職申報],[補正申報],[動態申報],[信託申報]"
再把 @s串進 SQL用 exec('...')去執行…
手邊沒資料庫可以測試,SQL借摳一下
declare @s nvarchar(max)
select @s=isnull(@s+',','')+quotename([declare_name])
from @t
group by[declare_name]
exec(
'select * from (select B.declare_name,count(A.type) 人數 from @t2 A,@t B
where A.type = B.declare_no group by B.declare_name,B.declare_no ) as x
pivot
(sum(人數) for declare_name in('
--以上複製貼上前後加單引號
+@s+
--以下複製貼上刪掉'[定期申報],..,[信託申報]'前後加單引號
')) AS PVT'
)
: ※ 引述《grence (多想兩分鐘 = =")》之銘言:
: : 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用法
: : 我實驗的結果是效率沒比較好,也沒比較好讀…
: : */
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.201.177
討論串 (同標題文章)