日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sqlserver中pivot的使用

發布時間:2025/3/15 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlserver中pivot的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


在Sql Server的幫助文檔中,對Pivot函數是這樣解釋的:
可以使用 PIVOT 和 UNPIVOT 關系運算符對表值表達式進行操作以獲得另一個表。PIVOT 通過將表達式某一列中的唯一值轉換為輸出中的多個列來轉換表值表達式,并在必要時對最終輸出中所需的任何其余的列值執行聚合.

對第一次使用PIVOT函數的朋友來說,這樣的解釋很難讓大家理解,下面編輯用PIVOT函數來實現一個行轉列的功能,以便讓讀者更容易理解該函數.

注意:PIVOT是Sql Server2005的新函數,2005前行轉列請參看本站:
SQLServer中(行列轉換)行轉列及列轉行且加平均值及匯總值

先創建一個工資表:

Create Table Salary
(
HrName varchar(50),
Monthly varchar(50),
Money money
)

往表中插入數據:

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'

查看正常的數據:

select * from Salary

結果:

HrName? Monthly Money
張三??? 一月??? 3000.00
張三??? 二月??? 3200.00
張三??? 三月??? 3500.00
李四??? 一月??? 3800.00
李四??? 二月??? 4200.00
李四??? 三月??? 3900.00
張三??? 一月??? 2000.00


查看行轉列后的數據:

select HrName as '姓名',[一月],[二月],[三月] from Salary
pivot(sum([Money]) for Monthly in ([一月],[二月],[三月])) as pvt

結果:

姓名?? 一月???? 二月???? 三月
李四? 3800.00?? 4200.00? 3900.00
張三? 5000.00?? 3200.00? 500.00


注意:
pivot(sum([Money]) for Monthly in ([一月],[二月],[三月])) 中的sum([Money]),這里必須是聚合函數,比如是min,max等。
in ([一月],[二月],[三月])中的[一月],[二月],[三月]即為Monthly的Value,又為新結果集的列名.

如果我們將其中的一月改為四月,因為數據源中沒有四月的記錄,所以四月查詢出來應該為Null.
測試:

select HrName as '姓名',[四月],[二月],[三月] from Salary
pivot(sum([Money]) for Monthly in ([四月],[二月],[三月])) as pvt

結果:

姓名?? 四月??? 二月???? 三月
李四?? NULL?? 4200.00?? 3900.00
張三?? NULL?? 3200.00?? 3500.00


以上為編輯個人理解小結,僅作參考!

本文來源于:http://www.lmwlove.com/ac/ID551

總結

以上是生活随笔為你收集整理的sqlserver中pivot的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。