精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SQL經典:T-SQL中的透視和逆透視解析

數據庫 SQL Server
SQL語句的透視和逆透視功能相信大家并不陌生。本文就以實例的形式演示了SQL查詢中的透視和逆透視過程,供讀者參考。

SQL查詢時,我們可能會用到T-SQL透視和逆透視的功能,比如我們對銷售表中的列進行查詢時就用到了。透視運算符要使用子查詢中的數據進行聚合運算,然后再輸出。本文通過實例詳細講述了這一過程,下面先說透視。

透視

簡單的說就是行列轉換。假設一個銷售表中存放著產品號,產品折扣,產品價格三個列,每一種產品號可能有多種折扣,每一種折扣只對應一個產品價格。下面貼出建表語句和插入數據語句。

  1. create table SalesOrderDetail(  
  2.  
  3. ProductID int /*unique多謝wuu00的提醒*/,  
  4.  
  5. 3 UnitPriceDiscount float,  
  6.  
  7. 4 ProductPrice float  
  8.  
  9. )  
  10.  
  11. insert into SalesOrderDetail values  
  12.  
  13. (711,.00,12),  
  14.  
  15. (711,.00,13),  
  16.  
  17. (711,.02,17),  
  18.  
  19. (711,.02,16),  
  20.  
  21. (711,.05,19),  
  22.  
  23. (711,.05,20),  
  24.  
  25. (711,.10,21),  
  26.  
  27. (711,.10,22),  
  28.  
  29. (711,.15,23),  
  30.  
  31. (711,.15,24),  
  32.  
  33. (747,.00,41),  
  34.  
  35. (747,.00,42),  
  36.  
  37. (747,.02,45),  
  38.  
  39. (747,.02,46),  
  40.  
  41. (776,.20,50),  
  42.  
  43. (776,.20,49),  
  44.  
  45. (776,.35,52),  
  46.  
  47. (776,.35,53) 

首先來看一條查詢語句

  1. select ProductID,UnitPriceDiscount,SUM(ProductPrice) as SumPrice   
  2.  
  3. from SalesOrderDetail   
  4.  
  5. group by ProductID,UnitPriceDiscount  
  6.  
  7. order by ProductID,UnitPriceDiscount 

這條語句查詢每一種產品針對每一種折扣的價錢總和,查詢結果如下圖1

SQL點滴:T-SQL中的透視和逆透視解析

圖1

從圖中我們可以看出771號產品有4種折扣,747號產品有2種折扣,776號產品有2種折扣。現在如果我們想知道每一種產品折扣,每一種產品的銷售總價是多少,如下圖2

SQL點滴:T-SQL中的透視和逆透視解析

圖2

如圖對于折扣0,產品711的總價是25,對以折扣0.02,產品711的總價是33等等不再列舉。原來的行是產品號,現在產品號變成了列,原來的折扣變成了現在的第一列。這就是數據透視的效果。下面我們開看看是這個效果是如何用語句實現的。

  1. select * from   
  2.  
  3. (select sod.ProductPrice,sod.ProductID,sod.UnitPriceDiscount from SalesOrderDetail sod) so  
  4.  
  5. pivot  
  6.  
  7. (  
  8.  
  9. sum(so.ProductPrice) for so.ProductID in([711],[747],[776])  
  10.  
  11. 6 ) as pt  
  12.  
  13. order by UnitPriceDiscount 

首選創建子查詢(select sod.ProductPrice,sod.ProductID,sod.UnitPriceDiscount from SalesOrderDetail sod) so ,透視運算符要使用這個子查詢中的數據進行聚合運算,此外輸出顯示也要用到子查詢中的列。代碼生成一個別名為so的表值表達式。在這個表中使用pivot在特定的列上進行聚合,這里是對so.ProductPrice進行聚合,聚合針對so.ProductID進行。

在這個例子中對三種產品的中的每一種創建一個列。這個相當于group by,從so表達式中進行數據篩選。不過這里沒有選出ProductPrice,僅僅生成每行三個列,每一種產品為一個列的結果集。因此帶有povit的表值表達式生成一個臨時的結果集,將這個結果集命名為pt,使用這個結果集生成我們需要的輸出。如果想要得到一個更加合適的列名可以修改篩選條件。如下:

  1. select pt.UnitPriceDiscount,[711] as Product711,[747] as Product747,[776] as Product747 from  
  2.  
  3. (select sod.ProductPrice,sod.ProductID,sod.UnitPriceDiscount from SalesOrderDetail sod) so  
  4.  
  5. pivot  
  6.  
  7. (  
  8.  
  9. sum(so.ProductPrice) for so.ProductID in([711],[747],[776])  
  10.  
  11. ) as pt  
  12.  
  13. order by UnitPriceDiscount 

輸出的結果如下圖3

SQL點滴:T-SQL中的透視和逆透視解析

圖3

#p#

逆透視

這次我們首先看語句和查詢結果再分析,語句如下:

  1. select ProductID,UnitPriceDiscount,ProductPrice  
  2.  
  3. from  
  4.  
  5. (select UnitPriceDiscount,Product711,Product747,Product776 from #Temp1) as up1  
  6.  
  7. unpivot(ProductPrice for ProductID in(Product711,Product747,Product776)) as up2  
  8.  
  9. 5 order by ProductID 

查詢結果如下圖4:

SQL點滴:T-SQL中的透視和逆透視解析

圖4

首先我們來看看逆透視得到了一個什么樣的結果。對于每一種產品的每一種折扣查詢得到他們的合計售價,這個和上面圖1中的結果是一樣的,是的,它和透視之前的結果是相同的。逆透視和透視并不是完全相反。Pivot會執行聚合,把可能存在的多個行合并輸出得到一行。由于已經進行了合并,unpivot無法重新生成原始的表值表達式,unpivot輸入中的null值將在輸出中消失,盡管在pivot操作之前輸入中可能存在原始的null值。如圖5是他們的比較。在圖中我們可以看到NULL值下面一個圖中沒有NULL值,剛好有9行。下圖把他們放在一起比較。

SQL點滴:T-SQL中的透視和逆透視解析

圖5

下面我們來剖析一下上面的語句到底做了些什么。首先是一個表值函數(select UnitPriceDiscount,Product711,Product747,Product776 from #Temp1) as up1,這個表值函數從透視結果,也就是臨時表中,然后針對每一個產品號進行逆透視:unpivot(ProductPrice for ProductID in(Product711,Product747,Product776)) as up2,然后從逆透視結果中選擇ProductID ,ProductPrice,從表值函數中選擇UnitPriceDiscount。

#p#

延伸閱讀

一個例子還不足以讓我們理解這個語句,下面來看看TechNet中的例子。

  1. SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost FROM Production.Product  
  2.  
  3. GROUP BY DaysToManufacture; 

這個語句查出Product表中的制造時間和平均成本,得到如下的結果

SQL點滴:T-SQL中的透視和逆透視解析

圖6

如圖可以看到沒有制造時間為3天的產品,這里留下一個伏筆,在透視之后會出現一個NULL值。下面使用透視語句對它進行行列轉換,就是使用0,1,2,3來作為列,使用具體的制造成本作為行數據。語句如下

  1. select   
  2.  
  3. 'AverageCost' as Cost_Sorted_By_Production_Days,  
  4.  
  5. [0],[1],[3],[4]  
  6.  
  7. from  
  8.  
  9. (select DaysToManufacture,StandardCost from Production.Product) as SourceTable  
  10.  
  11. 6 pivot  
  12.  
  13. (avg(StandardCost) for DaysToManufacture in ([0],[1],[3],[4])) as PivotTable 

依舊,首先用一個表值表達式把要透視的列和透視的項選擇出來,然后使用透視語句針對每一個項計算平均成本,最后從這個透視結果中選擇出結果。

結果如下圖7,我們可以看到制造時間為3天的產品沒有一個對應的平均成本。

SQL點滴:T-SQL中的透視和逆透視解析

圖7

下面這個例子稍微復雜一點。

  1. SELECT VendorID,count(PurchaseOrderID) as PurchaseCunt  
  2.  
  3. FROM Purchasing.PurchaseOrderHeader group by VendorID 

這條語句查詢得到每個供應商和他對應的交易號的個數,也就是每個供應商成交的交易次數。如圖8列舉出部分結果

SQL點滴:T-SQL中的透視和逆透視解析

圖8

從圖中我們可以看到供應商1共成交51比交易,供應商2共成交51筆交易。如果我們想查出這些交易分別是和那些雇員成交的應該怎么寫呢?首先我們來看看表中全部的雇員情況。

  1. select distinct(EmployeeID) from Purchasing.PurchaseOrderHeader 

查詢結果如圖9

SQL點滴:T-SQL中的透視和逆透視解析

圖9

如上圖我們可以看到共有12個雇員有成交記錄。對于這些雇員,如下查詢語句

  1. SELECT   
  2.  
  3. VendorID,  
  4.  
  5. [164] AS Emp164,  
  6.  
  7. [198] AS Emp198,  
  8.  
  9. [223] AS Emp223,  
  10.  
  11. [231] AS Emp231,  
  12.  
  13. [233] AS Emp233,  
  14.  
  15. [238] as Emp238,  
  16.  
  17. [241] as Emp241,  
  18.  
  19. [244] as Emp244,  
  20.  
  21. [261] as Emp261,  
  22.  
  23. [264] as Emp264,  
  24.  
  25. [266] as Emp266,  
  26.  
  27. [274] as Emp274  
  28.  
  29. 15 FROM   
  30.  
  31. (SELECT PurchaseOrderID,EmployeeID,VendorID  
  32.  
  33. FROM Purchasing.PurchaseOrderHeader) p  
  34.  
  35. PIVOT  
  36.  
  37. (  
  38.  
  39. COUNT (PurchaseOrderID)  
  40.  
  41. FOR EmployeeID IN  
  42.  
  43. ( [164], [198], [223], [231],[233],[238],[241],[244],[261],[264],[266],[274])  
  44.  
  45. ) AS pvt  
  46.  
  47. 24 ORDER BY pvt.VendorID; 

查詢結果如下圖10

SQL點滴:T-SQL中的透視和逆透視解析

圖10

可以 簡單地計算一下1+4+3+5+4+4+4+5+5+4+5+6+2剛好等于51,分開來看就是1號供應商分別和164號雇員成交4比記錄,和198號雇員成交3比記錄等等。

關于透視和逆透視的知識就介紹到這里,謝謝大家!

【編輯推薦】

  1. SQL Server如何動態生成分區腳本
  2. 用FOR XML PATH將查詢結果以XML輸出
  3. 淺述SQL Server的Replication技術創建技巧
  4. 簡述SQL Server Replication的常見錯誤及其處理
  5. 如何在SQL Server 2005中使用作業實現備份和特定刪除
責任編輯:趙鵬 來源: 博客園
相關推薦

2010-07-20 13:52:27

SQL Server

2021-06-08 09:18:54

SQLPandas數據透視表

2023-08-15 08:26:34

SQL Server查找死鎖

2010-07-06 10:36:35

SQL Server

2010-10-19 16:06:26

SQL Server索

2010-06-30 14:54:42

SQL Server

2011-10-19 10:07:16

T-SQL查詢變量

2011-03-31 09:30:27

SQL Server數管理SQL

2010-07-19 13:22:45

SQL Server

2010-12-06 09:26:23

SQL Server

2009-05-06 17:31:17

SQL EnlightT-SQL分析器

2013-01-05 13:49:00

2011-02-25 14:42:10

SQLwith關鍵字

2010-09-15 08:53:50

SQL Server

2014-04-28 14:06:41

2023-09-20 00:33:23

SQL數據庫

2010-07-13 10:35:20

SQL Server2

2011-08-24 16:36:00

T-SQL

2011-04-01 16:30:26

T-SQLDateTime

2017-02-20 11:48:15

戴爾
點贊
收藏

51CTO技術棧公眾號

97久久精品人人澡人人爽| 欧美色图国产精品| 午夜欧美一区二区三区在线播放| 国产精品免费在线播放| 7799精品视频天天看| 91综合在线| 亚洲国内精品在线| 欧美午夜aaaaaa免费视频| av黄在线观看| 久久天堂av综合合色蜜桃网| 91精品免费视频| 欧美另类一区二区| 亚洲成人av| 亚洲免费视频在线观看| 成人三级做爰av| 亚洲三级欧美| 一区二区三区加勒比av| 手机在线观看国产精品| 日本高清视频在线| 精品一区二区三区在线播放视频| 欧美性xxxx极品hd满灌| 色播五月综合| 好吊视频一区二区三区| 蜜臀a∨国产成人精品| 高清欧美性猛交| 国产真实乱在线更新| 亚洲国产精品嫩草影院久久av| 欧美欧美欧美欧美首页| 国产福利视频在线播放| 欧美xxxxhdvideosex| 国产精品久久777777| 欧美高清视频一区| 无码国精品一区二区免费蜜桃| 国产精品99久| 91香蕉亚洲精品| 中文字字幕在线观看| 久久综合影音| 国内精品久久久久久| 国产黄色片在线免费观看| 欧美一区二区麻豆红桃视频| 日韩精品免费观看| 午夜剧场免费看| 在线精品自拍| 欧美一区二区三区系列电影| 少妇网站在线观看| 97欧美成人| 欧美亚洲一区二区在线| 久久精品免费网站| 欧美日韩五区| 欧美羞羞免费网站| 亚洲欧洲日本精品| 欧美成人高清视频在线观看| 欧美三级日韩三级| jizzzz日本| 欧美亚洲福利| 91精品视频网| 在线成人免费av| **爰片久久毛片| 亚洲第一免费网站| 亚洲一区二区三区四区五区六区| 日韩高清成人在线| 亚洲精品视频网上网址在线观看 | 少妇太紧太爽又黄又硬又爽小说| 免费精品国产| 伊人久久大香线蕉av一区二区| 干b视频在线观看| 欧美日韩黑人| 久久精品国产视频| 岛国毛片在线观看| 日韩图片一区| 国产成人精品日本亚洲专区61| 日韩视频在线观看一区| 日韩精品一卡二卡三卡四卡无卡| 国产精品久久久久久亚洲调教| 一区二区视频网| 国产成人免费视频网站| 久久99精品久久久久久水蜜桃| 男女网站在线观看| 国产精品久久夜| 最近免费观看高清韩国日本大全| h片视频在线观看| 欧美性高跟鞋xxxxhd| 亚洲黄色小视频在线观看| 国产999精品在线观看| 欧美mv日韩mv亚洲| 亚洲精品乱码久久久久久久久久久久| 久久蜜桃av| 欧美黄网免费在线观看| 国产剧情在线视频| 国产麻豆精品在线观看| 精品国产aⅴ麻豆| jizz在线观看中文| 亚洲伊人色欲综合网| 成年人在线看片| 日本免费一区二区视频| 亚洲欧美视频在线| 日本黄色小说视频| 首页欧美精品中文字幕| 99久热re在线精品996热视频| 三级黄视频在线观看| 亚洲天天做日日做天天谢日日欢| a在线视频观看| 国产精品国产亚洲精品| 日韩精品中文字幕视频在线| 伊人久久久久久久久久久久久久| 日韩一级网站| 91中文在线视频| 极品美乳网红视频免费在线观看| 亚洲激情图片一区| 欧美伦理片在线看| 欧美精品国产白浆久久久久| www亚洲欧美| 91久久国产综合久久91| 国产69精品久久99不卡| 一区二区三区在线视频111| 黄色视屏在线免费观看| 日韩一区二区在线播放| 久久久久亚洲av无码a片| 在线精品观看| 91丨九色丨国产| 日本亚洲精品| 在线一区二区视频| 日本aaa视频| 日韩亚洲国产欧美| 亚洲一区久久久| 一级毛片视频在线| 在线免费亚洲电影| 成人精品在线观看视频| 狠狠爱综合网| 亚洲精品女av网站| 国内精品久久久久久野外| 欧美视频精品在线| 色噜噜日韩精品欧美一区二区| 亚洲香蕉网站| 福利视频久久| 伦理在线一区| 精品美女在线播放| 福利所第一导航| 国产麻豆精品一区二区| 中文字幕在线亚洲精品 | 91最新在线免费观看| eeuss影院www在线播放| 在线观看免费成人| 国产一区二区三区精品在线| 久久精品电影| 色姑娘综合网| 91国拍精品国产粉嫩亚洲一区| 尤物yw午夜国产精品视频| wwwwww在线观看| 国产精品午夜在线观看| 色婷婷成人在线| 911精品美国片911久久久| 成人免费视频97| av在线app| 欧美不卡在线视频| 不卡的免费av| 99在线视频精品| 欧美视频在线播放一区| 中文字幕精品影院| 国产成人精品免高潮费视频| 最新真实国产在线视频| 欧美丰满少妇xxxbbb| www欧美com| 粉嫩久久99精品久久久久久夜| 日本免费a视频| 久久动漫网址| 日韩美女视频中文字幕| 77导航福利在线| 欧美一级二级三级蜜桃| 久久免费公开视频| 26uuu久久综合| 欧美成人黄色网址| 在线一区免费| 国产精品一区二区在线观看| 欧美粗大gay| 精品国内亚洲在观看18黄 | 西西44rtwww国产精品| 久久久一区二区三区捆绑**| 超碰成人在线播放| 国内自拍一区| 欧美日韩电影一区二区| 在线观看欧美| 55夜色66夜色国产精品视频 | 老汉色老汉首页av亚洲| 国产大片精品免费永久看nba| 蜜桃视频在线观看www社区| 欧美变态口味重另类| 国产精品久久久久久人| 国产一区二区三区日韩精品 | 亚洲精品一二三四区| 日本人dh亚洲人ⅹxx| 国产欧美日韩一区二区三区在线| 欧美视频中文字幕| 91久久一区二区| 亚洲黄色a v| 亚洲精品小说| 久久综合九九| 国产精品视频一区二区三区| 午夜精品视频网站| 五月婷婷在线视频| 亚洲精品久久久久久久久久久久久 | 无码h黄肉3d动漫在线观看| 欧美绝品在线观看成人午夜影视| 国产精品成人久久| 亚洲丝袜制服诱惑| 国产毛片久久久久久久| 国产69精品一区二区亚洲孕妇| 午夜国产一区二区三区| 国产情侣一区| 日韩一级免费看| 91亚洲成人| 欧美国产综合视频| 果冻天美麻豆一区二区国产| 国产在线不卡精品| 国产亚洲一区二区手机在线观看 | 区一区二在线观看| 亚洲一二三四久久| 破处女黄色一级片| 国产精品美女久久久久aⅴ | 成人影院天天5g天天爽无毒影院 | 国产精品99久久精品| 日本不卡一区二区三区视频| 精品日产乱码久久久久久仙踪林| 91香蕉国产在线观看| www.一区| 国产福利成人在线| 午夜av不卡| 97超碰国产精品女人人人爽| 色婷婷在线播放| 欧美成人激情视频| 黄网站免费在线观看| 日韩中文字幕视频在线观看| 理论在线观看| 亚洲人成在线观看网站高清| 亚洲欧美日韩综合在线| 亚洲国产精品大全| 刘玥91精选国产在线观看| 日韩色在线观看| 国产99久久九九精品无码免费| 6080国产精品一区二区| 一级片视频网站| 777午夜精品视频在线播放| 91精品视频免费在线观看| 欧洲一区二区av| 艳妇乳肉豪妇荡乳av无码福利 | 三级在线免费看| 日韩1区2区日韩1区2区| 国产97色在线 | 日韩| 日韩精彩视频在线观看| 无需播放器的av| 久久9热精品视频| 手机av在线免费| 国产一区在线观看麻豆| 夜夜爽久久精品91| 国产凹凸在线观看一区二区| 午夜影院福利社| aaa亚洲精品| 国产精品密蕾丝袜| 国产精品不卡视频| 久久精品视频免费在线观看| 亚洲一区在线观看视频| 欧美不卡视频在线观看| 色偷偷成人一区二区三区91| 国产成人精品亚洲| 91麻豆精品久久久久蜜臀| www.成人免费视频| 日韩av在线免费观看| 黄色大片在线看| 久久精品99国产精品酒店日本| 亚洲人辣妹窥探嘘嘘| 天天射综合网视频| 国产欧美123| 亚洲少妇自拍| www.久久久精品| 国产精品一区二区久久不卡 | 超碰精品在线| 欧美日韩一区在线观看视频| 久久伦理在线| 欧美一级视频在线播放| 亚洲免费中文| 男人的天堂最新网址| 成人免费精品视频| 9.1片黄在线观看| 亚洲一区二区三区视频在线| 好看的av在线| 91麻豆精品国产自产在线观看一区| 亚洲精选一区二区三区| 亚洲一品av免费观看| 18在线观看的| 国产精品 欧美在线| 国产美女精品视频免费播放软件| 精品一区二区三区免费毛片| 91久久夜色精品国产按摩| 久久久久久www| 青青草视频一区| 国产伦精品一区二区三区88av| 国产丝袜美腿一区二区三区| 欧美国产日韩综合| 欧美色中文字幕| 少妇无码一区二区三区| 中文字幕亚洲无线码a| av男人的天堂在线观看| 91久久久久久久久久久| 伊人春色精品| 无码人妻少妇伦在线电影| 美腿丝袜在线亚洲一区| 亚洲国产果冻传媒av在线观看| 中文字幕字幕中文在线中不卡视频| 丰满人妻老熟妇伦人精品| 日韩精品一区二区三区四区视频| 黄色av免费在线观看| 国内精品久久影院| 高清一区二区中文字幕| 日韩中文字幕一区二区| 亚洲二区免费| 三区视频在线观看| 日本一区二区高清| 国产区一区二区三| 欧美精品一区男女天堂| 国产一二区在线观看| 国产精品久久久久久亚洲调教 | 成人动漫视频在线观看| 日本一区二区三区免费看 | 欧美日韩中文不卡| 久久久久久日产精品| 久久9999久久免费精品国产| 555夜色666亚洲国产免| 香蕉视频网站在线观看| 热99精品里视频精品| 欧美高清视频看片在线观看| 国产性生活免费视频| 国产一区二区伦理| 亚洲色图27p| 欧美三级视频在线观看| 成年人在线视频| 国产精品福利网| 国产一区网站| 免费国产成人av| 久久精品欧美日韩精品| 中文字幕精品三级久久久| 日韩av在线导航| 依依综合在线| 久久av一区二区三区漫画| 亚洲久久一区二区| 亚洲中文字幕一区| 疯狂做受xxxx欧美肥白少妇| 午夜视频福利在线| 亲爱的老师9免费观看全集电视剧| 理论片一区二区在线| 一女被多男玩喷潮视频| 91女人视频在线观看| 视频一区二区三区四区五区| 亚洲人成电影网站色www| 婷婷激情一区| 四虎影院一区二区三区 | 亚洲熟妇一区二区三区| 都市激情亚洲色图| 男人av在线| 国产欧美精品一区二区| 亚洲欧洲日韩| 亚洲av综合色区无码另类小说| 红桃视频成人在线观看| 天堂成人在线| 国产精品成人v| 欧美aaaa视频| 亚洲美女高潮久久久| 精品欧美一区二区三区| 国产综合在线观看| 成人久久一区二区| 亚洲激情一区| 免费看黄色av| 欧美一区二区三区的| 波多野结依一区| 日韩免费一区二区三区| 国产综合成人久久大片91| 日本少妇xxxx动漫| 亚洲品质视频自拍网| 色综合视频一区二区三区44| 人妻无码一区二区三区四区| 久久午夜电影网| 一道本无吗一区| 久久久久久综合网天天| 你懂的一区二区三区| 在线a免费观看| 精品久久久久久亚洲国产300| 69久久久久| 国内一区在线| 久久国产麻豆精品| 久久精品无码人妻| 在线丨暗呦小u女国产精品| 亚洲亚洲一区二区三区| 北条麻妃在线视频| 一区二区三区四区在线播放 | 国产欧美久久久| 欧美在线视频一区二区| 婷婷伊人综合| 91精品人妻一区二区| 欧美一区二区三区免费大片| 日韩欧美一区二区三区免费观看 | 男女激烈动态图|