成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server 2005新功能之PIVOT的描述

數(shù)據(jù)庫(kù) SQL Server
我們今天主要描述的是SQL Server 2005新功能之PIVOT,假如你對(duì)其相關(guān)內(nèi)容想了解的話,你就可以瀏覽以下的文章對(duì)其進(jìn)行了解。

以下的文章主要描述的是SQL Server 2005新功能之PIVOT,在工具的升級(jí)中,我個(gè)人認(rèn)為首先我們的看看這個(gè)工具,其主要是在哪些功能上得到加強(qiáng),所以今天我們就來(lái)看看SQL2005這個(gè)PIVOT吧。PIVOT 關(guān)系運(yùn)算符對(duì)表值表達(dá)式進(jìn)行操作以獲得另一個(gè)表。

PIVOT 通過(guò)將表達(dá)式某一列中的唯一值轉(zhuǎn)換為輸出中的多個(gè)列來(lái)轉(zhuǎn)換表。工具的升級(jí),我以為得先看看這個(gè)工具在哪些功能上得到加強(qiáng),今天我們就看看SQL2005這個(gè)PIVOT吧。PIVOT 關(guān)系運(yùn)算符對(duì)表值表達(dá)式進(jìn)行操作以獲得另一個(gè)表。PIVOT 通過(guò)將表達(dá)式某一列中的唯一值轉(zhuǎn)換為輸出中的多個(gè)列來(lái)轉(zhuǎn)換表值表達(dá)式,并在必要時(shí)對(duì)最終輸出中所需的任何其余的列值執(zhí)行聚合。

記得我們?cè)赟QL2000中要用聚合和CASE語(yǔ)句完成一個(gè)行列轉(zhuǎn)換吧,特別當(dāng)待轉(zhuǎn)成列的數(shù)據(jù)不定時(shí),我們往往構(gòu)造動(dòng)態(tài)SQL,然后用EXEC來(lái)運(yùn)行。

 

環(huán)境準(zhǔn)備:

 

  1. -- Author: happyflsytone   
  2. -- Version:V1.001   
  3. -- Date:2008-09-18 10:20:53   
  4. -- Test Data: ta   
  5. IF OBJECT_ID('ta') IS NOT NULL   
  6. DROP TABLE ta   
  7. ;   
  8. CREATE TABLE ta(id INT,col1 Nvarchar(2),col2 Nvarchar(2),col3 Nvarchar(4),col4 INT)   
  9. ;   
  10. INSERT INTO ta   
  11. SELECT 1,'HN','CS','abc',1 UNION ALL   
  12. SELECT 2,'HN','CS','abcd',2 UNION ALL   
  13. SELECT 3,'HN','CD','abcd' ,3UNION ALL   
  14. SELECT 4,'HN','HY','ae' ,4   
  15. ;   

我們先來(lái)回顧SQL2000的行列轉(zhuǎn)換,比如我們對(duì)上例程把col3轉(zhuǎn)列顯示,并把col4的和當(dāng)對(duì)應(yīng)列值。我們分兩種情況來(lái)討論:

一、當(dāng)col3的列值固定就是'abc','abcd','ae'三種情況

 

  1. SELECT   
  2. col1,   
  3. col2,   
  4. [abc] = SUM(CASE WHEN col3 = 'abc' THEN col4 ELSE 0 END),   
  5. [abcd] = SUM(CASE WHEN col3 = 'abcd' THEN col4 ELSE 0 END),   
  6. [ae] = SUM(CASE WHEN col3 = 'ae' THEN col4 ELSE 0 END)   
  7. FROM ta   
  8. GROUP BY col1,col2   
  9. /*   
  10. col1 col2 abc abcd ae   
  11. HN CD 0 3 0   
  12. HN CS 1 2 0   
  13. HN HY 0 0 4  

(3 行受影響)

 

二、當(dāng)col3的列值不固定時(shí)就運(yùn)用動(dòng)態(tài)SQL,其實(shí)也就是構(gòu)造一個(gè)sum(CASE WHEN ...)SQL字符串

 

  1. DECLARE @s varchar(8000)   
  2. SELECT @s = isnull(@s+',   
  3. ','') +'['+col3+'] = SUM(CASE WHEN col3 = '''+col3+''' THEN col4 ELSE 0 END)'   
  4. FROM ( SELECT distinct col3 FROM ta) a   
  5. SET @s = 'SELECT   
  6. col1,   
  7. col2,   
  8. '+@s + '   
  9. FROM ta   
  10. GROUP BY   
  11. col1,col2'   
  12. EXEC(@s)   
  13. /*   
  14. col1 col2 abc abcd ae   
  15. HN CD 0 3 0   
  16. HN CS 1 2 0   
  17. HN HY 0 0 4  

(3 行受影響)

 

我們先輸入這個(gè)@S看看是什么東東,只要加上print @s

 

  1. SELECT   
  2. col1,   
  3. col2,   
  4. [abc] = SUM(CASE WHEN col3 = 'abc' THEN col4 ELSE 0 END),   
  5. [abcd] = SUM(CASE WHEN col3 = 'abcd' THEN col4 ELSE 0 END),   
  6. [ae] = SUM(CASE WHEN col3 = 'ae' THEN col4 ELSE 0 END)   
  7. FROM ta   
  8. GROUP BY   
  9. col1,col2  

其實(shí)就是上面我們構(gòu)造的固定列值的SQL嘛。

好,現(xiàn)在們開始在2005中實(shí)現(xiàn)這個(gè)功能,先來(lái)看看2005的FROM子句的定義(關(guān)于如何看這個(gè)定義請(qǐng)參照SQL2005的文檔約定及Transate-SQL語(yǔ)法約定):

 

  1. [ FROM { <table_source> } [ ,...n ] ]   
  2. <table_source> ::=   
  3. {   
  4. <pivoted_table>   
  5. }   
  6. <pivoted_table> ::=   
  7. table_source PIVOT <pivot_clause> table_alias   
  8. <pivot_clause> ::=   
  9. ( aggregate_function ( value_column )   
  10. FOR pivot_column   
  11. IN ( <column_list> )   
  12. )   
  13. <column_list> ::=   
  14. column_name [ , ... ]   

pivot_column 和 value_column 是 PIVOT 運(yùn)算符使用的組合列。PIVOT 遵循以下過(guò)程獲得輸出結(jié)果集:

對(duì)分組列的 input_table 執(zhí)行 GROUP BY,為每個(gè)組生成一個(gè)輸出行。

 

輸出行中的分組列獲得 input_table 中該組的對(duì)應(yīng)列值。

 

通過(guò)執(zhí)行以下操作,為每個(gè)輸出行生成列列表中的列的值:

 

針對(duì) pivot_column,對(duì)上一步在 GROUP BY 中生成的行另外進(jìn)行分組。

 

對(duì)于 column_list 中的每個(gè)輸出列,選擇滿足以下條件的子組:

 

  1. pivot_column = CONVERT(<data type of pivot_column>, 'output_column')  

針對(duì)此子組上的 aggregate_function 對(duì) value_column 求值,其結(jié)果作為相應(yīng)的 output_column 的值返回。如果該子組為空,SQL Server 2005 將為該 output_column 生成空值。如果聚合函數(shù)是 COUNT,且子組為空,則返回零 (0)。

 

接著我們利用我們開頭的例子來(lái)理解一下這個(gè)FROM子句,很顯然我們的col4對(duì)應(yīng)上面的value_column,我們還假定列會(huì)下固定為這三項(xiàng),那么列 col3 對(duì)應(yīng)上面的pivot_column,進(jìn)而我們應(yīng)該得出[abc],[abcd],[ae]是column_name即我們的輸出列,最后我們只要構(gòu)造一下table_source就可以了,如何構(gòu)造這個(gè)table_source,顯然pivot_column 和 value_column應(yīng)該包含在其中,其它就應(yīng)該是你想要分組的列啦.

 

我們來(lái)總結(jié)一下:這個(gè)FROM子句是基于 table_source 對(duì) pivot_column 進(jìn)行透視,table_source 中 pivot_column 和 value_column 列之外的列被稱為透視運(yùn)算符的組合列,而PIVOT 是對(duì)輸入表執(zhí)行組合列的分組操作,并為每個(gè)組返回一行,好,我們?cè)囍鴮懗鲞@個(gè)SQL:

 

  1. SELECT col1,col2,[abc],[abcd],[ae]   
  2. FROM   
  3. (SELECT col1,col2,col3,col4   
  4. FROM ta ) p   
  5. PIVOT   
  6. ( SUM (col4)   
  7. FOR col3 IN ([abc],[abcd],[ae])   
  8. )AS unpvt  

我們執(zhí)行一下看看結(jié)果:

  1. /*   
  2. col1 abc abcd ae  

以上的相關(guān)內(nèi)容就是對(duì)SQL Server 2005 的新功能的介紹,望你能有所收獲。

【編輯推薦】

  1. SQL Server行轉(zhuǎn)列的什么情況下被用?
  2. SQL Server獲取表的容量很簡(jiǎn)單!
  3. SQL Server排序遇到NULL,不怕不帕!
  4. SQL Server 2005兩種快照隔離機(jī)制的不同之處
  5. SQL Server 2008 FileStream支持“真功夫版”

 

責(zé)任編輯:佚名 來(lái)源: 酷殼
相關(guān)推薦

2011-02-28 17:41:20

SQL Server

2010-06-30 10:15:40

SQL Server

2010-07-23 09:53:29

SQL Server

2010-07-20 11:01:51

SQL Server

2010-06-17 15:09:49

SQL Server

2010-06-17 15:24:51

SQL SERVER

2010-07-19 11:01:55

SQL Server

2010-06-18 13:41:33

SQL Server

2010-07-05 13:19:36

2010-07-20 09:15:03

SQL Server

2010-07-06 15:40:49

SQL Server

2010-07-05 12:33:13

SQL Server

2010-12-23 09:25:20

SQL Server

2010-06-28 13:27:33

SQL Server視

2009-10-23 11:12:21

SQL Server

2010-06-30 09:36:25

SQL Server

2009-10-23 12:44:35

SQL SERVER

2015-08-27 15:03:08

Live Query sql2016Livesql2016 調(diào)優(yōu)s

2011-08-22 11:23:41

SQL Server 數(shù)據(jù)修改

2010-07-23 12:55:29

SQL Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产免费拔擦拔擦8x高清 | 国产激情精品视频 | 黄片毛片免费看 | 色综合久久久久 | 亚洲精品一区二区 | 国产午夜av片 | 欧美在线a| 久久久入口 | 91精品国产91久久久久久最新 | 日韩一区二区三区视频 | 谁有毛片 | 91视频麻豆| 男人天堂av网 | 日本爱爱 | 99久久婷婷国产综合精品电影 | 国产成人精品一区二区三区网站观看 | 日韩高清黄色 | 欧美精品综合在线 | 国产一级大片 | 亚洲精品乱码久久久久久蜜桃91 | 中文久久| 国产精品观看 | www久久99| 国产不卡一 | 在线观看亚 | 亚洲精品视频一区 | 日韩欧美国产精品 | 久久精品国产亚洲一区二区 | 久草.com | 亚洲午夜精品一区二区三区 | 国产免费一区二区 | 免费在线观看av的网站 | 中文在线一区二区 | 99视频免费播放 | 福利片在线看 | 日本三级线观看 视频 | 91高清视频在线观看 | 日韩中文一区二区 | 国产成人精品一区二区三区四区 | 欧美狠狠操 | 中文字幕一区二区三区精彩视频 |