国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

2005中實現表的行列轉換
2006-06-13   天極Yesky 

  PIVOT和UNPIVOT關系運算符是SQL Server 2005提供的新增功能,因此,對升級到SQL Server 2005的數據庫使用PIVOT和UNPIVOT時,數據庫的兼容級別必須設置為90(可以使用sp_dbcmptlevel存儲過程設置兼容級別)。

  在查詢的FROM子句中使用PIVOT和UNPIVOT,可以對一個輸入表值表達式執行某種操作,以獲得另一種形式的表。PIVOT運算符將輸入表的行旋轉為列,并能同時對行執行聚合運算。而UNPIVOT運算符則執行與PIVOT運算符相反的操作,它將輸入表的列旋轉為行。

  在FROM子句中使用PIVOT和UNPIVOT關系運算符時的語法格式如下:

[ FROM { <table_source> } [ ,...n ] ]

<table_source> ::= {
 table_or_view_name [ [ AS ] table_alias ]
 <pivoted_table> | <unpivoted_table>
}

<pivoted_table> ::=table_source PIVOT <pivot_clause> table_alias

<pivot_clause> ::=( aggregate_function ( value_column )
 FOR pivot_column
  IN ( <column_list> )
)

<unpivoted_table> ::=table_source UNPIVOT <unpivot_clause> table_alias

<unpivot_clause> ::=( value_column FOR pivot_column IN ( <column_list> ) )

<column_list> ::= column_name [ , ... ] table_source PIVOT <pivot_clause>

  指定對table_source表中的pivot_column列進行透視。table_source可以是一個表、表表達式或子查詢。

aggregate_function

  系統或用戶定義的聚合函數。注意:不允許使用COUNT(*)系統聚合函數。

value_column

  PIVOT運算符用于進行計算的值列。與UNPIVOT一起使用時,value_column不能是輸入table_source中的現有列的名稱。

FOR pivot_column

  PIVOT運算符的透視列。pivot_column必須是可隱式或顯式轉換為nvarchar()的類型。

  使用UNPIVOT時,pivot_column是從table_source中提取輸出的列名稱,table_source中不能有該名稱的現有列。

IN ( column_list )

  在PIVOT子句中,column_list列出pivot_column中將成為輸出表的列名的值。

  在UNPIVOT子句中,column_list列出table_source中將被提取到單個pivot_column中的所有列名。

table_alias

  輸出表的別名。

UNPIVOT < unpivot_clause >

  指定將輸入表中由column_list指定的多個列的值縮減為名為pivot_column的單個列。

  常見的可能會用到PIVOT的情形是:需要生成交叉表格報表以匯總數據。交叉表是使用較為廣泛的一種表格式,例如,圖5-4所示的產品銷售表就是一個典型的交叉表,其中的月份和產品種類都可以繼續添加。但是,這種格式在進行數據表存儲的時候卻并不容易管理,要存儲圖5-4這樣的表格數據,數據表通常需要設計為圖5-5這樣的結構。這樣就帶來一個問題,用戶既希望數據容易管理,又希望能夠生成一種能夠容易閱讀的表格數據。好在PIVOT為這種轉換提供了便利。


圖5-4 產品銷售表 圖5-5 數據表結構

  假設Sales.Orders表中包含有ProductID(產品ID)、OrderMonth(銷售月份)和SubTotal(銷售額)列,并存儲有如表5-2所示的內容。

表5-2 Sales.Orders表中的內容
ProductID OrderMonth SubTotal
1 5 100.00
1 6 100.00
2 5 200.00
2 6 200.00
2 7 300.00
3 5 400.00
3 5 400.00

  執行下面的語句:

SELECT ProductID, [5] AS 五月, [6] AS 六月, [7] AS 七月
FROM
Sales.Orders PIVOT
(
SUM (Orders.SubTotal)
FOR Orders.OrderMonth IN
( [5], [6], [7] )
) AS pvt

ORDER BY ProductID;

  在上面的語句中,Sales.Orders是輸入表,Orders.OrderMonth是透視列(pivot_column),Orders.SubTotal是值列(value_column)。上面的語句將按下面的步驟獲得輸出結果集:

  a.PIVOT首先按值列之外的列(ProductID和OrderMonth)對輸入表Sales.Orders進行分組匯總,類似執行下面的語句:

SELECT ProductID,
OrderMonth,
SUM (Orders.SubTotal) AS SumSubTotal
FROM Sales.Orders
GROUP BY ProductID,OrderMonth;

  這時候將得到一個如表5-3所示的中間結果集。其中只有ProductID為3的產品由于在5月有2筆銷售記錄,被累加到了一起(值為800)。
表5-3 Sales.Orders表經分組匯總后的結果

ProductID OrderMonth SumSubTotal
1 5 100.00
1 6 100.00
2 5 200.00
2 6 200.00
2 7 300.00
3 5 800.00

  b.PIVOT根據FOR Orders.OrderMonth IN指定的值5、6、7,首先在結果集中建立名為5、6、7的列,然后從圖5-3所示的中間結果中取出OrderMonth列中取出相符合的值,分別放置到5、6、7的列中。此時得到的結果集的別名為pvt(見語句中AS pvt的指定)。結果集的內容如表5-4所示。

表5-4 使用FOR Orders.OrderMonth IN( [5], [6], [7] )后得到的結果集
ProductID 5 6 7
1 100.00 100.00 NULL
2 200.00 200.00 200.00
3 800.00 NULL NULL

  c.最后根據SELECT ProductID, [5] AS 五月, [6] AS 六月, [7] AS 七月FROM的指定,從別名pvt結果集中檢索數據,并分別將名為5、6、7的列在最終結果集中重新命名為五月、六月、七月。這里需要注意的是FROM的含義,其表示從經PIVOT關系運算符得到的pvt結果集中檢索數據,而不是從Sales.Orders中檢索數據。最終得到的結果集如表5-5所示。

表5-5 由表5-2所示的Sales.Orders表將行轉換為列得到的最終結果集
ProductID 五月 六月 七月
1 100.00 100.00 NULL
2 200.00 200.00 200.00
3 800.00 NULL NULL

  UNPIVOT與PIVOT執行幾乎完全相反的操作,將列轉換為行。但是,UNPIVOT并不完全是PIVOT的逆操作,由于在執行PIVOT過程中,數據已經被進行了分組匯總,所以使用UNPIVOT并不會重現原始表值表達式的結果。假設表5-5所示的結果集存儲在一個名為MyPvt的表中,現在需要將列標識符“五月”、“六月”和“七月”轉換到對應于相應產品ID的行值(即返回到表5-3所示的格式)。這意味著必須另外標識兩個列,一個用于存儲月份,一個用于存儲銷售額。為了便于理解,仍舊分別將這兩個列命名為OrderMonth和SumSubTotal。參考下面的語句:

CREATE TABLE MyPvt (ProductID int, 五月int, 六月 int, 七月int); --建立MyPvt表
GO
  --將表5-5中所示的值插入到MyPvt表中

INSERT INTO MyPvt VALUES (1,100,100,0);
INSERT INTO MyPvt VALUES (2,200,200,200);
INSERT INTO MyPvt VALUES (3,800,0,0);

  --執行UNPIVOT

SELECT ProductID, OrderMonth, SubTotal
FROM
 MyPvt UNPIVOT
 (SubTotal FOR OrderMonth IN
  (五月, 六月, 七月)
 )AS unpvt;


  上面的語句將按下面的步驟獲得輸出結果集:

  a.首先建立一個臨時結果集的結構,該結構中包含MyPvt表中除IN (五月, 六月, 七月)之外的列,以及SubTotal FOR OrderMonth中指定的值列(SubTotal)和透視列(OrderMonth)。

  b.將在MyPvt中逐行檢索數據,將表的列名稱(在IN (五月, 六月, 七月)中指定)放入OrderMonth列中,將相應的值放入到SubTotal列中。最后得到的結果集如表5-6所示。

表5-6 使用UNPIVOT得到的結果集
ProductID OrderMonth SubTotal
1 五月 100
1 六月 100
1 七月 0
2 五月 200
2 六月 200
2 七月 200
3 五月 800
3 六月 0
3 七月 0

熱詞搜索:

上一篇:電腦也能路由 路由器與計算機的區別
下一篇:應用程序中的高級SQL注入

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
国产精品夜夜爽| 91论坛在线播放| 亚洲精品日日夜夜| 欧美国产欧美综合| 国产精品欧美一区喷水| 久久久不卡网国产精品一区| 欧美成人午夜电影| 久久女同性恋中文字幕| 日本一区二区三区电影| 国产精品国产三级国产三级人妇| 国产欧美日韩中文久久| 国产亚洲精品超碰| 国产精品美日韩| 亚洲女人的天堂| 亚洲小少妇裸体bbw| 日韩专区欧美专区| 久久草av在线| 成人av电影在线播放| 97se亚洲国产综合自在线| 在线中文字幕一区二区| 欧美日韩电影在线| 欧美成人午夜电影| 国产精品女同互慰在线看| 国产精品乱子久久久久| 亚洲国产美国国产综合一区二区| 日韩精品一二三四| 精品一区二区三区的国产在线播放| 老司机精品视频在线| www.综合网.com| 欧美三级在线看| 久久亚洲春色中文字幕久久久| 欧美激情一区在线| 日韩精品免费专区| 国产·精品毛片| 在线不卡a资源高清| 亚洲国产精品精华液ab| 亚洲一区二区三区四区五区黄 | 国产一区二区在线看| 国产99精品国产| 欧美日韩国产免费| 国产午夜亚洲精品午夜鲁丝片| 中文字幕日韩一区| 久久精品国产77777蜜臀| 91免费视频网址| 久久久久国色av免费看影院| 一区二区三区在线免费观看| 国内成+人亚洲+欧美+综合在线| 一本大道av伊人久久综合| 欧美va亚洲va国产综合| 亚洲成人高清在线| 99视频精品全部免费在线| 精品区一区二区| 亚洲国产人成综合网站| aaa欧美大片| 久久精品日产第一区二区三区高清版 | 久久久噜噜噜久久人人看| 亚洲精品免费看| 国产jizzjizz一区二区| 精品国产一区a| 日韩av电影一区| 欧美日韩精品一区二区三区蜜桃| 欧美国产乱子伦| 国内精品久久久久影院色| 777xxx欧美| 亚洲韩国精品一区| 欧洲av一区二区嗯嗯嗯啊| 自拍偷在线精品自拍偷无码专区| 国产精品一二三| 国产女人aaa级久久久级| 国产原创一区二区| 日韩限制级电影在线观看| 日韩电影在线免费观看| 7777精品伊人久久久大香线蕉的| 亚洲免费观看高清| 日本精品视频一区二区三区| 中文字幕一区二区在线播放| hitomi一区二区三区精品| 中文字幕av不卡| 91网站在线观看视频| 中文字幕日韩av资源站| 91免费国产视频网站| 亚洲欧美日韩人成在线播放| 日本乱码高清不卡字幕| 午夜电影久久久| 欧美日韩电影一区| 亚洲成人av电影| 欧美精品欧美精品系列| 欧美96一区二区免费视频| 日韩免费在线观看| 国产伦精一区二区三区| 欧美激情综合五月色丁香| 91在线无精精品入口| 一区二区三区四区在线| 欧美日韩一卡二卡三卡| 日本成人在线视频网站| 久久夜色精品一区| 99精品久久99久久久久| 亚洲国产日韩精品| 精品久久久久久久久久久久久久久| 精久久久久久久久久久| 亚洲欧洲日产国码二区| 制服.丝袜.亚洲.另类.中文| 寂寞少妇一区二区三区| 国产精品日产欧美久久久久| 91高清视频免费看| 亚洲444eee在线观看| 久久久久久麻豆| 91久久一区二区| 韩国成人福利片在线播放| 中文字幕中文字幕在线一区| 日本道在线观看一区二区| 毛片av一区二区| 成人免费一区二区三区在线观看| 欧美色图12p| 韩国毛片一区二区三区| 一区二区三区四区在线播放 | 99国产麻豆精品| 久久国产三级精品| 亚洲欧美日韩国产综合| 日韩欧美精品三级| 在线视频中文字幕一区二区| 经典三级视频一区| 亚洲国产毛片aaaaa无费看| 久久人人97超碰com| 欧美日韩精品一区视频| 91片在线免费观看| 国产综合色视频| 日韩和的一区二区| 亚洲欧洲综合另类| 国产日产精品一区| 精品日本一线二线三线不卡| 欧美无砖专区一中文字| 国产成人99久久亚洲综合精品| 日本成人在线视频网站| 亚洲福利电影网| 亚洲免费视频中文字幕| 中文字幕国产一区| 久久这里只有精品6| 日韩视频一区二区三区| 欧美日韩夫妻久久| 欧美视频一区二区三区在线观看| 99久久久久久99| 成人高清av在线| 国产成人自拍网| 激情五月激情综合网| 久久国内精品自在自线400部| 三级久久三级久久| 偷拍与自拍一区| 午夜精品福利久久久| 亚洲高清不卡在线| 午夜精品在线看| 日韩综合小视频| 日本不卡一区二区三区 | 日韩精品一区二区三区老鸭窝| 在线看国产一区二区| 一本到不卡精品视频在线观看| 成人黄色小视频| 波多野结衣视频一区| 成人免费看片app下载| 99久久国产综合精品女不卡| thepron国产精品| av网站一区二区三区| 99re在线精品| 色婷婷激情久久| 欧美日韩中文另类| 91精品免费在线| 精品国产免费久久| 欧美国产一区二区在线观看| 国产精品久久久久久久久动漫| 日韩一区在线免费观看| 亚洲午夜电影在线| 日本欧美久久久久免费播放网| 久久99在线观看| 福利一区在线观看| 色哟哟在线观看一区二区三区| 欧美日本在线一区| 欧美大片在线观看一区二区| 久久久综合精品| 最近日韩中文字幕| 日本人妖一区二区| 成人精品电影在线观看| 91久久奴性调教| 日韩美女主播在线视频一区二区三区| 日韩一区二区三区电影在线观看 | 亚洲色图清纯唯美| 亚洲亚洲精品在线观看| 黑人精品欧美一区二区蜜桃| 成人av在线电影| 在线综合亚洲欧美在线视频| 久久日韩粉嫩一区二区三区| 亚洲视频免费观看| 蜜臀国产一区二区三区在线播放| 成人在线视频一区二区| 这里只有精品电影| 国产精品久久久久久久久晋中| 视频精品一区二区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产自产视频一区二区三区| 日本高清免费不卡视频| 国产天堂亚洲国产碰碰|