在實際做專案的時候遇到這樣乙個問題:資料庫表裡儲存了每個火車站每種型別的火車票銷售數量,但是有的火車站可能不銷售動車票或者高鐵票,最終的結果要如圖2所示,不銷售型別的火車票就空出來。本文採用master.dbo.spt_values動態生成最大數目的列頭,然後採用case when實現每種型別的火車票進行統計。
原始表 dc
圖1期望得到的資料結果
圖2可以採用下面的指令碼實現
declare @tsql varchar(6000)
declare @total int
--取得不同車站擁有的車型最大數量
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 數量 else '''' end) ''數量'''
from master.dbo.spt_values
where type='p' and number between 1 and @total
select @tsql='select 站名,'+@tsql
+' from
(select 站名,車型,數量,
row_number() over(partition by 站名 order by 車型) ''rn''
from dc) t
group by 站名'
exec(@tsql)
SQL行列轉換的另一種方法
create table tb 姓名 varchar 10 課程 varchar 10 分數 int insert into tb values 張三 語文 74 insert into tb values 張三 數學 83 insert into tb values 張三 物理 93 insert...
資訊共享的另一種形式 復用
共享的第一種形式是在不同人 不同部門 不同單位之間共享,這是大家經常理解的一種。而另一種共享形式大家可能不很注意,就是資料的縱向共享,歷史資料的使用也是一種共享。如果說前面的共享理解為廣度的共享,那麼後一種是深度共享。一次和搞工程設計專業的人聊天,說起原來非計算機畫圖時代,很辛苦,效率很低,而現在開...
另一種尊重
上中學的時候,有一節課印象非常深刻。老師問我們如果無意闖入乙個房間,發現房間裡有一位女士正在洗澡,這時應該怎麼辦?有同學回答就當什麼也沒看見,退出房間。還有同學回答 說聲對不起!女士。然後退出去。老師笑了笑說,還有更好的答案,那就是 對不起,先生!有一對結婚多年的夫妻,有一次出差在外的妻子有一件急事...