程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL SERVER行轉列應用小結

SQL SERVER行轉列應用小結

編輯:關於SqlServer


  有些時候還是要用到行轉列,比如下面的數據:

  一般的表結構大多會這麼設計,通過關聯查詢就可以得出上面的數據(客運量就隨便123了,非常時期以防恐怖分子)

  不用說,大家也明白要得到下面的數據:


  列數不多的話一般可以這樣,也是網上比較經典的寫法

Select 時間,
sum(case when 線路='1號線' then 客運量 end) As '1號線' ,
sum(case when 線路='2號線' then 客運量 end) As '2號線' ,
sum(case when 線路='5號線' then 客運量 end) As '5號線' ,
......
From table Group By 時間
在SQL Server2005裡可以用Pivot關鍵字來操作,如下:


declare @Str nvarchar(max)
set @str='select 時間'
select @str=@str+',['+線路+']' from #T group by 線路
set @str=@str+' FROM (
 SELECT 時間, 客運量, 線路
 FROM #T ) AS T
PIVOT ( sum(客運量) FOR 線路 IN
  ('
select @str=@str+'['+線路+'],' from #T group by 線路
set @str=left(@str,Len(@str)-1)
set @str=@str+ ')) AS thePivot
ORDER BY 時間'

declare @T1 table(date datetime,一號線 float,二號線 float, 五號線 float,十號線 float,十三號線 float,八通線 float,奧運支線 float ,機場線 float)
INSERT INTO @T1 exec(@str)
SELECT * FROM @T1
drop table #T

  上面的語句如果運行提示不支持pivot關鍵字的話(一般SQL2000庫導入到SQL2005可能出現這問題),執行下這句:EXEC sp_dbcmptlevel  數據庫名稱 ,90

  為了方便看,字段改成中文了,其中#T表的數據就是最上面第一張圖的數據(只要基礎數據源組織成這樣的就行)

  把處理後的數據存放在表變量@T1中(當然臨時表也行),因為還要和其他表進行關聯,導出一張大表,如下(表的部分列):

  大致就這樣吧

  處理的方式應該還有其它的,僅供參考。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved