有些時候還是要用到行轉列,比如下面的數據:
一般的表結構大多會這麼設計,通過關聯查詢就可以得出上面的數據(客運量就隨便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中(當然臨時表也行),因為還要和其他表進行關聯,導出一張大表,如下(表的部分列):
大致就這樣吧
處理的方式應該還有其它的,僅供參考。