亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

12、SQL Server 行列轉換

2024-08-31 00:54:04
字體:
來源:轉載
供稿:網友
12、SQL Server 行列轉換

SQLServer行轉列

在SQL Server 2005中PIVOT 用于將列值轉換為列名(行轉列),在SQL Server 2000中是沒有這個關鍵字的 只能用case語句實現。

--創建測試數據庫use mastergoif ( exists (select * from sys.databases where name = 'webDB') )    drop database webDBgocreate database webDB on PRimary(    name = 'webDB',    filename = 'f:/database/webDB.mdf',    size = 5mb,    maxsize = unlimited,    filegrowth = 10%)log on(    name = 'webDB_log',    filename = 'f:/database/webDB_log.ldf',    size = 3mb,    maxsize = 50mb,    filegrowth = 2mb)use webDBgo--創建測試表if( exists ( select * from sys.objects where name = 'student'))    drop table studentgocreate table student(    id int identity(1,1) primary key,    name varchar(20) not null,    subject varchar(20) not null,    score int not null)    --插入測試數據insert into student values ('張三','語文',90),('張三','數學',100),('張三','英語',80),('李四','英語',90),('王五','語文',90),('李四','語文',90),('李四','數學',70),('王五','數學',62),('王五','英語',82)select * from student

SQL Server 2000行轉列

select name as 姓名,SUM(case [subject] when '語文' then score else 0 end) as '語文',SUM(case [subject] when '數學' then score else 0 end ) as '數學',SUM(case [subject] when '英語' then score else 0 end ) as '英語'from student group by name

如圖所示,已經按照腳本中指定的列名進行轉換,但這樣做需要知道表中都有哪些數據可以作為列。通常將這種方法稱為靜態方法。

declare @sql varchar(1000)set @sql = 'select name as 姓名 , 'select @sql = @sql + 'sum(case [subject] when ''' + [subject] + ''' then score  else 0 end ) as '''+ QUOTENAME([subject]) + ''',' from (select distinct [subject] from student ) as s --后加逗號,然后截取最后一個逗號select @sql = LEFT(@sql,len(@sql)-1) + ' from student group by name 'print(@sql)exec(@sql)select QUOTENAME('aa[]bb') --其中quotename 用于將字符串為有效的標識符

這種方法不需要知道到底需要將哪些數據作為列轉換,它會自動去數據中查找不重復的數據,都會作為列來顯示。通常將這種方法稱為動態方法,拼接sql方法。

SQLServer 2005行轉列

select * from (    select name,[subject],score from student) s pivot (sum(score) for [subject] in (語文,數學,英語)) as pvtorder by pvt.name

PIVOT語法是:PIVOT(聚合函數(列) for 列 in (值,值,值)) as p

這個是靜態方法行轉列,怎么樣代碼簡潔吧。

declare @sql_str varchar(1000)declare @sql_col varchar(1000)select @sql_col = ISNULL(@sql_col + ',','') + QUOTENAME([subject]) from student group by [subject] --先確定要轉換的列名set @sql_str = 'select * from (    select name,[subject],score from student ) s pivot (sum(score) for [subject] in (' + @sql_col + ')) as pvtorder by pvt.name'print(@sql_str)exec(@sql_str)

以上2005中動態創建方法。

SQL Server列轉行

在SQL Server 2005中UNPIVOT用于將列名轉換為值(列轉行),在SQL Server 2000中只能用UNION語句實現。

use webDBgo--創建測試表if( exists ( select * from sys.objects where name = 'student'))    drop table studentgocreate table student(    id int identity(1,1) primary key,    name varchar(20) not null,    語文 int not null,    英語 int not null,    數學 int not null)    --插入測試數據insert into student values ('張三',87,90,62),('李四',87,90,65),('王五',23,90,34)select * from student

SQLServer 2000中列轉行

SQLServer 2000靜態方法

select * from (    select name,課程='語文',分數=語文 from student    union all    select name,課程='數學',分數=數學 from student    union all    select name,課程='英語',分數=英語 from student) t order by name, case 課程 when '語文' then 1 when '數學' then 2 when '英語' then 3 end

SQLServer 2000動態SQL

declare @sql varchar(1000)select @sql = ISNULL(@sql + ' union all ','') + ' select name,課程='+ QUOTENAME(name,'''')+' , 分數 = ' + QUOTENAME(name) + ' from student' from syscolumns where id=object_id('student') and name not in ('id','name')print(@sql)exec(@sql)

SQL Server 2005 靜態SQL使用UNPIVOT關鍵字

select name,課程,分數 from student unpivot (分數 for 課程 in (語文,英語,數學)) s

SQLServer 2005動態SQL

declare @sql varchar(1000)select @sql = isnull(@sql + ',','') + quotename(name) from syscolumns where id = object_id('student') and name not in ('id','name')order by colidset @sql = 'select name,課程,分數 from student unpivot (分數 for 課程 in ('+@sql+')) s'print(@sql)exec(@sql)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本午夜人人精品| 国产男女猛烈无遮挡91| 欧美成年人视频网站| 国产成人精品一区二区三区| 日韩女在线观看| 亚洲免费电影在线观看| 欧美激情精品久久久久久蜜臀| 国产丝袜一区二区三区免费视频| 日韩综合视频在线观看| 日韩精品久久久久久久玫瑰园| 亚洲最大中文字幕| www国产亚洲精品久久网站| 亚洲人成绝费网站色www| 欧美最猛性xxxxx(亚洲精品)| 亚洲成人网av| 国产成人精彩在线视频九色| 国产日韩精品在线观看| 亚洲一区二区在线播放| 国产+人+亚洲| 欧美国产日韩二区| 欧美成人中文字幕在线| 亚洲xxx自由成熟| 日韩电影中文字幕av| 国产精品视频久| 亚洲欧美资源在线| 国产精品久久久久77777| 91在线观看免费观看| 成人夜晚看av| 日韩在线观看免费全集电视剧网站| 91九色综合久久| 欧美贵妇videos办公室| 亲爱的老师9免费观看全集电视剧| 国产97在线|亚洲| 精品视频在线播放色网色视频| 亚洲精品aⅴ中文字幕乱码| 亚洲精品国产欧美| 欧美成人一区二区三区电影| 精品日本美女福利在线观看| 国产成人高清激情视频在线观看| 国产精品揄拍500视频| 欧美色播在线播放| 一区二区中文字幕| 国产成人精品视频在线观看| 国产999在线观看| 亚洲精品v欧美精品v日韩精品| 亚洲裸体xxxx| 一区二区福利视频| 97视频在线观看视频免费视频| 久久综合国产精品台湾中文娱乐网| 久久久国产精品亚洲一区| 992tv成人免费影院| 久久久国产一区二区三区| 亚洲国产精品嫩草影院久久| 国精产品一区一区三区有限在线| 欧美一区二区色| 国产精品女主播视频| 1769国产精品| 另类色图亚洲色图| 亚洲免费视频观看| 亚洲xxxxx性| 欧美精品一本久久男人的天堂| 亚洲国产精品免费| 久久精品人人做人人爽| 激情懂色av一区av二区av| 欧美激情亚洲另类| zzijzzij亚洲日本成熟少妇| 久久在精品线影院精品国产| 日韩av中文字幕在线播放| 欧美成人黑人xx视频免费观看| 亚洲精品网址在线观看| 伊人青青综合网站| 久久免费视频在线| 亚洲а∨天堂久久精品9966| 精品久久久久久| 亚洲精品成人免费| 亚洲天堂网站在线观看视频| 亚洲影视中文字幕| 欧美国产日韩一区二区在线观看| 亚洲一区二区日本| 少妇av一区二区三区| 欧美日韩国产丝袜美女| 日韩成人免费视频| 国产日韩欧美中文在线播放| 91精品国产91久久久久久最新| 精品亚洲永久免费精品| 欧美日韩在线一区| 欲色天天网综合久久| 亚洲乱码一区av黑人高潮| 国产成人精品免高潮在线观看| 日韩黄色在线免费观看| 2019亚洲男人天堂| 国产精品免费在线免费| 欧美在线视频一区| 欧美一级成年大片在线观看| 欧美视频二区36p| 亚洲人午夜精品| 亚洲国产成人精品久久久国产成人一区| 亚洲丝袜一区在线| 日韩经典中文字幕| 福利一区福利二区微拍刺激| 欧美与黑人午夜性猛交久久久| 羞羞色国产精品| 日本久久精品视频| www.亚洲人.com| 欧美午夜性色大片在线观看| 情事1991在线| 欧美视频裸体精品| 欧美极品少妇xxxxⅹ喷水| 日本精品久久中文字幕佐佐木| 精品久久久久久| 91社区国产高清| 亚洲电影中文字幕| 2019中文字幕在线免费观看| 色偷偷av一区二区三区乱| 亚洲精品电影在线| 欧美日本中文字幕| 丝袜亚洲欧美日韩综合| 亚洲人成网7777777国产| 久久夜色精品亚洲噜噜国产mv| 热99精品只有里视频精品| 国产精品自拍偷拍| 久久九九免费视频| 欧美性xxxx| 4p变态网欧美系列| 亚洲精品日韩欧美| 亚洲天堂免费观看| 日韩色av导航| 亚洲丝袜av一区| 欧美成人一区二区三区电影| 亚洲一区二区自拍| 亚洲欧洲高清在线| 久久精品亚洲国产| 日韩av综合网站| 狠狠干狠狠久久| 91亚洲国产精品| 久久99亚洲热视| 8050国产精品久久久久久| 亚洲综合中文字幕在线观看| 欧美激情免费视频| 日韩电影在线观看中文字幕| 91视频免费网站| 国产亚洲欧洲黄色| 欧美二区乱c黑人| 中文字幕日韩精品在线观看| 日韩亚洲欧美中文高清在线| 在线午夜精品自拍| 亚洲老头老太hd| 欧美日韩午夜视频在线观看| 国产日产亚洲精品| 国产小视频91| 国产精品久久久久国产a级| 国产美女精品免费电影| 91色视频在线导航| 日本精品视频在线播放| 日韩精品免费在线视频| 亚洲欧美在线一区| 日韩av三级在线观看| 91亚洲va在线va天堂va国| 精品国产乱码久久久久久天美| 欧美劲爆第一页| 久久久久久久久久久网站| 欧美精品性视频| 国产精品欧美一区二区| 久久中文久久字幕|