SQL Server行轉(zhuǎn)列的什么情況下被用?
以下的文章主要描述的是SQL Server行轉(zhuǎn)列在什么情況下可能被應(yīng)用的道,你如果對(duì)其有興趣的話你就可以點(diǎn)擊以下的文章進(jìn)行觀看了,以下的文章將會(huì)揭開(kāi)它的神秘面紗,以下的文章將會(huì)揭開(kāi)它的神秘面紗。
有些時(shí)候還是要用到SQL Server行轉(zhuǎn)列,比如下面的數(shù)據(jù):
一般的表結(jié)構(gòu)大多會(huì)這么設(shè)計(jì),通過(guò)關(guān)聯(lián)查詢就可以得出上面的數(shù)據(jù)(客運(yùn)量就隨便123了,非常時(shí)期以防恐怖分子)
不用說(shuō),大家也明白要得到下面的數(shù)據(jù):
列數(shù)不多的話一般可以這樣,也是網(wǎng)上比較經(jīng)典的寫(xiě)法
Select 時(shí)間,
sum(case when 線路='1號(hào)線' then客運(yùn)量 end) As '1號(hào)線' ,
sum(case when 線路='2號(hào)線' then客運(yùn)量 end) As '2號(hào)線' ,
sum(case when 線路='5號(hào)線' then客運(yùn)量 end) As '5號(hào)線' ,
......
Fromtable Group By 時(shí)間
在SQL Server2005里可以用Pivot關(guān)鍵字來(lái)操作,如下:
- declare@Strnvarchar(max)
- set@str='select時(shí)間'
- select@str=@str+',['+線路+']'from#Tgroupby線路
- set@str=@str+'FROM(
SELECT時(shí)間,客運(yùn)量,線路
FROM#T)AST
PIVOT(sum(客運(yùn)量)FOR線路IN
('
select@str=@str+'['+線路+'],'from#Tgroupby線路
set@str=left(@str,Len(@str)-1)
set@str=@str+'))ASthePivot
ORDERBY時(shí)間'
declare@T1table(datedatetime,一號(hào)線float,二號(hào)線float,五號(hào)線float,十號(hào)線float,十三號(hào)線float,八通線float,奧運(yùn)支線float,機(jī)場(chǎng)線float)
- INSERTINTO@T1exec(@str)
- SELECT*FROM@T1
- droptable#T
SQL Server行轉(zhuǎn)列上面的語(yǔ)句如果運(yùn)行提示不支持pivot關(guān)鍵字的話(一般SQL2000庫(kù)導(dǎo)入到SQL2005可能出現(xiàn)這問(wèn)題),執(zhí)行下這句:EXEC sp_dbcmptlevel 數(shù)據(jù)庫(kù)名稱,90
為了方便看,字段改成中文了,其中#T表的數(shù)據(jù)就是最上面***張圖的數(shù)據(jù)(只要基礎(chǔ)數(shù)據(jù)源組織成這樣的就行)
把處理后的數(shù)據(jù)存放在表變量@T1中(當(dāng)然臨時(shí)表也行),因?yàn)檫€要和其他表進(jìn)行關(guān)聯(lián),導(dǎo)出一張大表,如下(表的部分列):
大致就這樣吧
處理的方式應(yīng)該還有其它的,僅供參考。
【編輯推薦】
- SQL Server2000連接中出現(xiàn)錯(cuò)誤的原因是什么?
- SQL Server開(kāi)發(fā)中10個(gè)常見(jiàn)問(wèn)題有哪些?
- SQL Server代碼編輯工具的詳細(xì)介紹
- 巧妙SQL Server 文件大小的步驟
- SQL Server unicode 支持的具體體現(xiàn)