精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲国产91视频| 国产在线色视频| 亚洲网站啪啪| 亚洲图片欧洲图片av| 国产无色aaa| 麻豆蜜桃在线| 国产区在线观看成人精品 | 亚洲www啪成人一区二区| 亚洲欧洲日韩在线| 国语精品中文字幕| 在线免费av片| 在线亚洲观看| 久久亚洲精品国产亚洲老地址| 强迫凌虐淫辱の牝奴在线观看| 国精产品一区二区三区有限公司| 亚洲伦理在线精品| 日韩国产在线一区| 内射后入在线观看一区| 蜜桃久久久久久久| 97在线免费观看| 国产suv一区二区三区| 自拍偷拍精品| 精品国产网站在线观看| 天天爱天天操天天干| av福利导福航大全在线| 成人欧美一区二区三区1314| 欧美日韩一区二区视频在线| 亚洲国产精品suv| 秋霞电影一区二区| 51ⅴ精品国产91久久久久久| 国内偷拍精品视频| 欧美电影三区| 国产一区二区日韩精品欧美精品| 99精品一区二区三区无码吞精| 欧美日韩免费电影| 91福利国产精品| 欧美一区二区中文字幕| 亚洲区欧洲区| 亚洲男女毛片无遮挡| 午夜精品福利一区二区| 日韩a在线看| 波多野结衣中文字幕一区 | 污视频免费在线观看网站| 欧美在线极品| 精品福利樱桃av导航| 欧美日韩福利在线| 超级碰碰不卡在线视频| 亚洲精品精品亚洲| 日韩a级黄色片| caoporn免费在线| 亚洲日本韩国一区| 中文字幕乱码一区二区三区| av免费在线一区二区三区| 久久亚洲综合av| 玖玖玖精品中文字幕| 婷婷视频在线观看| 91偷拍与自偷拍精品| 精品国产综合| 三级在线观看| 国产亚洲欧美激情| 新呦u视频一区二区| 国产精品毛片一区二区三区四区| 久久品道一品道久久精品| 日本精品国语自产拍在线观看| 国产资源在线观看| 国产精品美女久久久久aⅴ国产馆| 日日夜夜精品网站| 在线看av的网址| 亚洲欧洲制服丝袜| 91免费国产精品| 538在线精品| 精品国产91久久久久久老师| 免费日韩视频在线观看| 欧美精选视频一区二区| 欧美日韩精品免费| 久久精品一二三四| 里番精品3d一二三区| 亚洲欧美在线磁力| 99自拍偷拍视频| 你懂的视频一区二区| 欧美激情精品久久久久| 成年免费在线观看| 日韩和欧美一区二区| 成人福利网站在线观看11| 一区二区三区免费在线| 成人一区在线观看| 欧美高清视频一区二区三区在线观看| 成人在线视频成人| 一区二区三区精品| 超碰97人人射妻| 久久国内精品| 亚洲成av人乱码色午夜| 亚洲a区在线视频| 国产精品欧美久久久久天天影视| 国产一区二区在线视频| 国产日韩欧美一区二区| 成年人视频免费在线观看| 亚洲欧美日韩人成在线播放| 天堂…中文在线最新版在线| 国产精品第一国产精品| 亚洲精品一线二线三线无人区| 全黄一级裸体片| 综合精品一区| 国产精品成人在线| 亚洲av色香蕉一区二区三区| 国产色产综合色产在线视频 | 亚洲国产免费看| 国产精品国产自产拍高清av水多| 午夜精品久久久久久久99| 久久精品人人做人人爽97 | 久久www成人_看片免费不卡| 91亚洲永久免费精品| 三区在线观看| 一区二区三区不卡在线观看 | 亚洲白虎美女被爆操| 少妇视频一区二区| 久久精品一区二区国产| 成人3d动漫一区二区三区91| www.在线视频.com| 日韩欧美aⅴ综合网站发布| 先锋资源在线视频| 成人6969www免费视频| 91禁外国网站| 国产成人毛毛毛片| 国产精品国产自产拍高清av王其| 欧美s码亚洲码精品m码| 午夜日韩影院| 久久精品最新地址| 最近中文字幕在线免费观看| 99精品在线观看视频| 女人床在线观看| 青娱乐极品盛宴一区二区| 亚洲色图激情小说| 四虎精品永久在线| 99精品视频中文字幕| 日本a视频在线观看| 伊人精品综合| 久久影院模特热| 国产又粗又猛又爽| 国产精品久久久久影院| 毛葺葺老太做受视频| 亚洲尤物av| 538国产精品一区二区免费视频| 亚洲美女综合网| 亚洲黄色av一区| 少妇欧美激情一区二区三区| 婷婷综合激情| 91免费精品国偷自产在线| 无遮挡动作视频在线观看免费入口| 欧美综合欧美视频| 欧美人妻一区二区三区| 蜜桃av噜噜一区| 伊人色综合影院| 亚洲精品第一| 欧美成aaa人片免费看| 国产三级在线观看视频| 亚洲精品中文在线| 美女流白浆视频| 激情自拍一区| 久久影院理伦片| 电影一区二区三区| 尤物yw午夜国产精品视频| 中文无码av一区二区三区| 国产精品―色哟哟| 91亚洲免费视频| 亚洲美女视频| 国产精品久久精品视| 超碰91在线观看| 亚洲欧美日韩一区在线| 中文字幕一二区| 亚洲欧美日韩国产手机在线 | 加勒比久久高清| 88xx成人网| 亚洲伊人精品酒店| 成人中文在线| 中文字幕在线看视频国产欧美在线看完整| 国产又粗又爽视频| 中文字幕不卡在线| 日韩a一级欧美一级| 欧美高清不卡| 六十路精品视频| 涩涩涩久久久成人精品| 欧美精品福利在线| 秋霞av在线| 9191久久久久久久久久久| 久久久.www| wwww国产精品欧美| 想看黄色一级片| 亚洲福利一区| 日韩在线导航| 亚洲综合网狠久久| 日韩美女av在线免费观看| 老司机午夜在线| 亚洲国产天堂久久综合网| 中文字幕视频免费观看| 亚洲午夜国产一区99re久久| 亚洲天堂岛国片| 国产 日韩 欧美大片| 青青在线视频免费| 亚洲一区 二区 三区| 久热国产精品视频一区二区三区| 国产欧美自拍| 97在线观看免费| 国产原厂视频在线观看| 日韩成人在线免费观看| 国产女人高潮时对白| 欧美视频在线免费看| 国产激情无码一区二区三区| 91毛片在线观看| 性久久久久久久久久久久久久| 久久成人精品| 国产欧美日韩小视频| 欧美va久久久噜噜噜久久| 欧美极品jizzhd欧美| 精品一区二区三区中文字幕在线 | 久久综合久久综合这里只有精品| 亚洲美女色播| 国产精品av在线播放| av漫画网站在线观看| 九九热这里只有在线精品视| 超碰免费在线观看| 亚洲精品一二区| 殴美一级特黄aaaaaa| 日韩一区二区麻豆国产| 亚洲一线在线观看| 欧美亚洲一区二区在线| 久久亚洲精品国产| 亚洲成av人影院| 激情视频在线播放| 亚洲三级在线免费观看| 看黄色录像一级片| 欧美国产视频在线| 男人舔女人下部高潮全视频| 久久亚洲精华国产精华液 | 日韩亚洲第一页| 国产一区二区影视| 亚洲摸下面视频| 亚洲人成色777777精品音频| 精品粉嫩超白一线天av| 精品久久久无码中文字幕| 在线成人av网站| 91在线精品入口| 这里只有精品电影| 91影院在线播放| 欧美伦理视频网站| 国产农村妇女毛片精品久久| 欧美电影影音先锋| 国产精品一区二区黑人巨大| 欧美日韩国产在线观看| 一级特黄色大片| 欧美丰满美乳xxx高潮www| 在线播放国产一区| 这里只有精品免费| 国内精品久久久久久久久久久 | 天堂网在线播放| 亚洲精品福利在线| 久久国产精品高清一区二区三区| 亚洲人成网7777777国产| 国产在线三区| 日韩中文字幕在线视频| 精品麻豆一区二区三区| 美女撒尿一区二区三区| 丝袜国产在线| 91精品国产777在线观看| 天堂中文av在线资源库| 国产成人拍精品视频午夜网站| 午夜av成人| 5566av亚洲| 精品国内亚洲2022精品成人| 免费中文日韩| 色天天综合网| 999久久欧美人妻一区二区| 亚洲毛片在线| 九一精品在线观看| 国产精品911| 懂色av粉嫩av蜜乳av| 国产欧美日韩在线视频| 免费三级在线观看| 天天影视网天天综合色在线播放| 精品久久久久久久久久久久久久久久久久| 欧美日韩三级一区| 亚洲精品97久久中文字幕无码 | 青青草福利视频| 国产精品久久久久久久久免费相片| 日本天堂中文字幕| 欧美日韩国产在线播放| 中文字幕永久在线观看| 精品日韩99亚洲| 国产在线一二| 久久久久久久久久久亚洲| 日韩影片中文字幕| 999国产在线| 国产一区二区亚洲| 少妇久久久久久被弄到高潮| 美女黄网久久| 亚洲少妇一区二区三区| 中文字幕欧美日韩一区| 精品无码免费视频| 欧美日韩一区二区在线观看视频 | 亚洲欧洲激情在线| av免费看在线| 国产盗摄xxxx视频xxx69| 青草伊人久久| 日韩少妇中文字幕| 亚洲黄色成人| 亚洲一区二区三区四区精品| 国产婷婷精品av在线| 久久精品国产亚洲av高清色欲| 欧美午夜视频网站| 污污视频在线免费看| 久久五月情影视| 精品视频在线一区二区在线| 国产伦精品一区二区三区视频黑人| 欧美国产小视频| 色诱视频在线观看| aaa欧美日韩| 久久久久久久蜜桃| 欧美人体做爰大胆视频| 国产永久免费高清在线观看 | 夜夜嗨av色一区二区不卡| 女囚岛在线观看| 91热福利电影| 日韩精品水蜜桃| 老熟妇仑乱视频一区二区| 99久久精品国产网站| 青青草免费av| 欧美日本一区二区三区四区| 黄网在线免费| 国产成人精品久久亚洲高清不卡| 国产欧美啪啪| 91成人综合网| 粉嫩av一区二区三区在线播放| 99鲁鲁精品一区二区三区| 欧美日本韩国一区二区三区视频 | 免费97视频在线精品国自产拍| 久久久久久久性潮| 天堂一区二区三区| 日韩vs国产vs欧美| 欧美大波大乳巨大乳| 色综合欧美在线| 天堂av在线播放| 17婷婷久久www| 网友自拍区视频精品| 99热成人精品热久久66| 91老司机福利 在线| 日韩欧美亚洲一区二区三区| 亚洲黄色www| 少妇视频一区| 欧美日韩国产综合在线| 天堂av在线一区| 久久久久亚洲av成人无码电影| 欧美日韩在线视频一区| 欧洲天堂在线观看| 国产成人精品久久| 日韩成人a**站| 在线免费av播放| 日韩一区欧美一区| www天堂在线| 午夜精品福利视频| 色综合中文网| 亚洲无吗一区二区三区| 国产精品电影一区二区| www.亚洲黄色| 久久理论片午夜琪琪电影网| 日本精品影院| 狠狠躁狠狠躁视频专区| 中文字幕亚洲精品在线观看| www.我爱av| 97香蕉久久夜色精品国产| jvid福利在线一区二区| 久久人人爽av| 亚洲愉拍自拍另类高清精品| 日韩欧美在线番号| 国产欧美精品在线播放| 亚洲手机视频| 受虐m奴xxx在线观看| 欧美日本免费一区二区三区| 日本h片在线| 久久久精彩视频| 久久精品免费看| 久久久全国免费视频| 精品中文字幕久久久久久| 欧美亚洲黄色| 久操网在线观看| 亚洲国产成人自拍| 亚洲高清视频在线播放| 欧美一区深夜视频| 先锋资源久久| 一本加勒比波多野结衣| 欧美日韩视频在线观看一区二区三区| 日韩影视在线| 日本午夜精品一区二区| 国产成人在线影院| 神马久久久久久久| 九九热这里只有精品免费看| 国产亚洲电影| 国产人妖在线观看| 欧美日韩中文字幕一区二区| 国产亚洲成av人片在线观看| 一区二区免费在线视频|