sqlserver中pivot的使用
在Sql Server的幫助文檔中,對Pivot函數(shù)是這樣解釋的:
可以使用 PIVOT 和 UNPIVOT 關(guān)系運(yùn)算符對表值表達(dá)式進(jìn)行操作以獲得另一個(gè)表。PIVOT 通過將表達(dá)式某一列中的唯一值轉(zhuǎn)換為輸出中的多個(gè)列來轉(zhuǎn)換表值表達(dá)式,并在必要時(shí)對最終輸出中所需的任何其余的列值執(zhí)行聚合.
對第一次使用PIVOT函數(shù)的朋友來說,這樣的解釋很難讓大家理解,下面編輯用PIVOT函數(shù)來實(shí)現(xiàn)一個(gè)行轉(zhuǎn)列的功能,以便讓讀者更容易理解該函數(shù).
注意:PIVOT是Sql Server2005的新函數(shù),2005前行轉(zhuǎn)列請參看本站:
SQLServer中(行列轉(zhuǎn)換)行轉(zhuǎn)列及列轉(zhuǎn)行且加平均值及匯總值
先創(chuàng)建一個(gè)工資表:
Create Table Salary
(
HrName varchar(50),
Monthly varchar(50),
Money money
)
往表中插入數(shù)據(jù):
insert into Salary(HrName,Monthly,[Money])
select '張三','一月','3000'
union all
select '張三','二月','3200'
union all
select '張三','三月','3500'
union all
select '李四','一月','3800'
union all
select '李四','二月','4200'
union all
select '李四','三月','3900'
union all
select '張三','一月','2000'
查看正常的數(shù)據(jù):
select * from Salary
結(jié)果:
HrName? Monthly Money
張三??? 一月??? 3000.00
張三??? 二月??? 3200.00
張三??? 三月??? 3500.00
李四??? 一月??? 3800.00
李四??? 二月??? 4200.00
李四??? 三月??? 3900.00
張三??? 一月??? 2000.00
查看行轉(zhuǎn)列后的數(shù)據(jù):
select HrName as '姓名',[一月],[二月],[三月] from Salary
pivot(sum([Money]) for Monthly in ([一月],[二月],[三月])) as pvt
結(jié)果:
姓名?? 一月???? 二月???? 三月
李四? 3800.00?? 4200.00? 3900.00
張三? 5000.00?? 3200.00? 500.00
注意:
pivot(sum([Money]) for Monthly in ([一月],[二月],[三月])) 中的sum([Money]),這里必須是聚合函數(shù),比如是min,max等。
in ([一月],[二月],[三月])中的[一月],[二月],[三月]即為Monthly的Value,又為新結(jié)果集的列名.
如果我們將其中的一月改為四月,因?yàn)閿?shù)據(jù)源中沒有四月的記錄,所以四月查詢出來應(yīng)該為Null.
測試:
select HrName as '姓名',[四月],[二月],[三月] from Salary
pivot(sum([Money]) for Monthly in ([四月],[二月],[三月])) as pvt
結(jié)果:
姓名?? 四月??? 二月???? 三月
李四?? NULL?? 4200.00?? 3900.00
張三?? NULL?? 3200.00?? 3500.00
以上為編輯個(gè)人理解小結(jié),僅作參考!
本文來源于:http://www.lmwlove.com/ac/ID551
總結(jié)
以上是生活随笔為你收集整理的sqlserver中pivot的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.net中的Timer与updat
- 下一篇: 除了陈真处外的深圳论坛SZ4J