在實(shí)際做項(xiàng)目的時(shí)候遇到這樣一個(gè)問題:數(shù)據(jù)庫表里存儲(chǔ)了每個(gè)火車站每種類型的火車票銷售數(shù)量,但是有的火車站可能不銷售動(dòng)車票或者高鐵票,最終的結(jié)果要如圖2所示,不銷售類型的火車票就空出來。本文采用master.dbo.spt_values動(dòng)態(tài)生成最大數(shù)目的列頭,然后
在實(shí)際做項(xiàng)目的時(shí)候遇到這樣一個(gè)問題:數(shù)據(jù)庫表里存儲(chǔ)了每個(gè)火車站每種類型的火車票銷售數(shù)量,但是有的火車站可能不銷售動(dòng)車票或者高鐵票,最終的結(jié)果要如圖2所示,不銷售類型的火車票就空出來。本文采用master.dbo.spt_values動(dòng)態(tài)生成最大數(shù)目的列頭,然后采用case when實(shí)現(xiàn)每種類型的火車票進(jìn)行統(tǒng)計(jì)。
原始表 dc
圖1
<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+xtrN+7XDtb21xMr9vt294bn7PC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140326/2014032609093821.jpg" alt="\">
圖2
可以采用下面的腳本實(shí)現(xiàn)
declare @tsql varchar(6000) declare @total int --取得不同車站擁有的車型最大數(shù)量 select @total= max(c) from (select count(1) c from dc group by 站名)t select @tsql=isnull(@tsql+',','') +'max(case when rn='+rtrim(number)+' then 車型 else '''' end) ''車型'',' +'max(case when rn='+rtrim(number)+' then 數(shù)量 else '''' end) ''數(shù)量''' from master.dbo.spt_values where type='P' and number between 1 and @total select @tsql='select 站名,'+@tsql +' from (select 站名,車型,數(shù)量, row_number() over(partition by 站名 order by 車型) ''rn'' from dc) t group by 站名' exec(@tsql)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com