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

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

sql 普通行列轉換

2024-08-31 00:59:33
字體:
來源:轉載
供稿:網友
問題:假設有張學生成績表(tb)如下:
姓名 課程 分數
張三 語文 74
張三 數學 83
張三 物理 93
李四 語文 74
李四 數學 84
李四 物理 94
想變成(得到如下結果):
姓名 語文 數學 物理
---- ---- ---- ----
李四 74 84 94
張三 74 83 93
-------------------
*/
create table tb(姓名 varchar(10) , 課程 varchar(10) , 分數 int)
insert into tb values('張三' , '語文' , 74)
insert into tb values('張三' , '數學' , 83)
insert into tb values('張三' , '物理' , 93)
insert into tb values('李四' , '語文' , 74)
insert into tb values('李四' , '數學' , 84)
insert into tb values('李四' , '物理' , 94)
go
--SQL SERVER 2000 靜態SQL,指課程只有語文、數學、物理這三門課程。(以下同)
select 姓名 as 姓名 ,
max(case 課程 when '語文' then 分數 else 0 end) 語文,
max(case 課程 when '數學' then 分數 else 0 end) 數學,
max(case 課程 when '物理' then 分數 else 0 end) 物理
from tb
group by 姓名
--SQL SERVER 2000 動態SQL,指課程不止語文、數學、物理這三門課程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分數 else 0 end) [' + 課程 + ']'
from (select distinct 課程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 靜態SQL。
select * from (select * from tb) a pivot (max(分數) for 課程 in (語文,數學,物理)) b
--SQL SERVER 2005 動態SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 課程 from tb group by 課程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分數) for 課程 in (' + @sql + ')) b')
---------------------------------
/*
問題:在上述結果的基礎上加平均分,總分,得到如下結果:
姓名 語文 數學 物理 平均分 總分
---- ---- ---- ---- ------ ----
李四 74 84 94 84.00 252
張三 74 83 93 83.33 250
*/
--SQL SERVER 2000 靜態SQL。
select 姓名 姓名,
max(case 課程 when '語文' then 分數 else 0 end) 語文,
max(case 課程 when '數學' then 分數 else 0 end) 數學,
max(case 課程 when '物理' then 分數 else 0 end) 物理,
cast(avg(分數*1.0) as decimal(18,2)) 平均分,
sum(分數) 總分
from tb
group by 姓名
--SQL SERVER 2000 動態SQL。
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分數 else 0 end) [' + 課程 + ']'
from (select distinct 課程 from tb) as a
set @sql = @sql + ' , cast(avg(分數*1.0) as decimal(18,2)) 平均分 , sum(分數) 總分 from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 靜態SQL。
select m.* , n.平均分 , n.總分 from
(select * from (select * from tb) a pivot (max(分數) for 課程 in (語文,數學,物理)) b) m,
(select 姓名 , cast(avg(分數*1.0) as decimal(18,2)) 平均分 , sum(分數) 總分 from tb group by 姓名) n
where m.姓名 = n.姓名
--SQL SERVER 2005 動態SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 課程 from tb group by 課程
exec ('select m.* , n.平均分 , n.總分 from
(select * from (select * from tb) a pivot (max(分數) for 課程 in (' + @sql + ')) b) m ,
(select 姓名 , cast(avg(分數*1.0) as decimal(18,2)) 平均分 , sum(分數) 總分 from tb group by 姓名) n
where m.姓名 = n.姓名')
drop table tb
------------------
------------------
/*
問題:如果上述兩表互相換一下:即表結構和數據為:
姓名 語文 數學 物理
張三 74  83  93
李四 74  84  94
想變成(得到如下結果):
姓名 課程 分數
---- ---- ----
李四 語文 74
李四 數學 84
李四 物理 94
張三 語文 74
張三 數學 83
張三 物理 93
--------------
*/
create table tb(姓名 varchar(10) , 語文 int , 數學 int , 物理 int)
insert into tb values('張三',74,83,93)
insert into tb values('李四',74,84,94)
go
--SQL SERVER 2000 靜態SQL。
select * from
(
select 姓名 , 課程 = '語文' , 分數 = 語文 from tb
union all
select 姓名 , 課程 = '數學' , 分數 = 數學 from tb
union all
select 姓名 , 課程 = '物理' , 分數 = 物理 from tb
) t
order by 姓名 , case 課程 when '語文' then 1 when '數學' then 2 when '物理' then 3 end
--SQL SERVER 2000 動態SQL。
--調用系統表動態生態。
declare @sql varchar(8000)
select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [課程] = ' + quotename(Name , '''') + ' , [分數] = ' + quotename(Name) + ' from tb'
from syscolumns
where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名為姓名的其它列
order by colid asc
exec(@sql + ' order by 姓名 ')
--SQL SERVER 2005 動態SQL。
select 姓名 , 課程 , 分數 from tb unpivot (分數 for 課程 in([語文] , [數學] , [物理])) t
--SQL SERVER 2005 動態SQL,同SQL SERVER 2000 動態SQL。
--------------------
/*
問題:在上述的結果上加個平均分,總分,得到如下結果:
姓名 課程 分數
---- ------ ------
李四 語文 74.00
李四 數學 84.00
李四 物理 94.00
李四 平均分 84.00
李四 總分 252.00
張三 語文 74.00
張三 數學 83.00
張三 物理 93.00
張三 平均分 83.33
張三 總分 250.00
------------------
*/
select * from
(
select 姓名 as 姓名 , 課程 = '語文' , 分數 = 語文 from tb
union all
select 姓名 as 姓名 , 課程 = '數學' , 分數 = 數學 from tb
union all
select 姓名 as 姓名 , 課程 = '物理' , 分數 = 物理 from tb
union all
select 姓名 as 姓名 , 課程 = '平均分' , 分數 = cast((語文 + 數學 + 物理)*1.0/3 as decimal(18,2)) from tb
union all
select 姓名 as 姓名 , 課程 = '總分' , 分數 = 語文 + 數學 + 物理 from tb
) t
order by 姓名 , case 課程 when '語文' then 1 when '數學' then 2 when '物理' then 3 when '平均分' then 4 when '總分' then 5 end
drop table tb
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美特级www| 欧美性猛交xxxx富婆| 成人黄色网免费| 久久国产精品久久久久久久久久| 夜夜躁日日躁狠狠久久88av| 性欧美xxxx| 亚洲成人免费在线视频| 91视频国产高清| 日韩电视剧在线观看免费网站| 国产91网红主播在线观看| 欧美在线视频网站| 欧美日韩一二三四五区| 欧美一级bbbbb性bbbb喷潮片| 国内精久久久久久久久久人| 亚洲精品电影在线| 亚洲精品久久在线| 日韩美女写真福利在线观看| 中文字幕在线精品| 国产91精品高潮白浆喷水| 亚洲综合中文字幕在线观看| 久久久国产精彩视频美女艺术照福利| 国产精品第10页| 欧美日韩亚洲一区二| 成人高h视频在线| 成人国产亚洲精品a区天堂华泰| 日韩在线观看免费av| 欧美性视频在线| 97在线观看免费| 欧美中文字幕第一页| 亚洲大胆人体视频| 亚洲精品一区中文字幕乱码| 欧美国产日产韩国视频| 久久久久久久久久久人体| 日韩最新免费不卡| 日韩在线观看免费全集电视剧网站| 一区二区亚洲精品国产| 成人精品一区二区三区电影免费| 国产狼人综合免费视频| 精品亚洲男同gayvideo网站| 欧美大肥婆大肥bbbbb| 深夜福利一区二区| 欧美区在线播放| 精品国产一区二区三区久久久狼| 国产精品aaa| 久久精品国产久精国产一老狼| 国产乱人伦真实精品视频| 欧美伊久线香蕉线新在线| 欧美精品久久久久久久久| 久久久精品网站| 成人黄色大片在线免费观看| 日韩成人在线免费观看| 中文在线不卡视频| 中文字幕亚洲无线码在线一区| 国产成一区二区| 欧美天天综合色影久久精品| 久久夜精品va视频免费观看| 国产97在线亚洲| 欧美俄罗斯性视频| 日韩精品在线观看网站| 欧美性猛交视频| 538国产精品一区二区在线| 91精品国产成人| 欧美黄色片免费观看| 亚洲欧美日韩在线高清直播| 好吊成人免视频| 日本成人在线视频网址| 中文字幕自拍vr一区二区三区| 欧美国产精品人人做人人爱| 国产精品久久久久久久午夜| 亚洲精品美女免费| 国产一区视频在线播放| 亚洲视频自拍偷拍| 91色琪琪电影亚洲精品久久| 精品高清一区二区三区| 久久久精品在线观看| 欧美性xxxxhd| 精品国产91久久久| 7777kkkk成人观看| 欧美亚洲成人网| 亚洲欧美日韩区| 国内精品模特av私拍在线观看| 7777免费精品视频| 欧美另类99xxxxx| 亚洲乱码国产乱码精品精| 国模视频一区二区| 中日韩午夜理伦电影免费| 国产精品黄视频| 国产欧美精品一区二区三区-老狼| 成人激情黄色网| 久久久国产在线视频| 热久久美女精品天天吊色| 国产精品视频一| 国产成人激情小视频| 97久久超碰福利国产精品…| 国产美女精彩久久| 亚洲精品v天堂中文字幕| 一区二区三区美女xx视频| 最近2019中文字幕一页二页| 91免费国产视频| 欧美成人精品在线观看| 亚洲片av在线| 国产精品www| 青青久久av北条麻妃黑人| 国产在线高清精品| 91欧美精品午夜性色福利在线| 久久99久久亚洲国产| 日韩精品在线播放| 亚洲综合日韩在线| 午夜精品一区二区三区在线| 国产精品美女网站| 久久这里有精品| 日本三级韩国三级久久| 亲爱的老师9免费观看全集电视剧| 中文字幕一区二区三区电影| 成人综合国产精品| 国产成人精品日本亚洲专区61| 欧美电影免费观看网站| 中文.日本.精品| 欧美性生交大片免费| 91精品国产色综合| 日本韩国欧美精品大片卡二| 亚洲天堂免费在线| 国产精品久久久久久一区二区| 欧美另类在线播放| 国语自产在线不卡| 欧美自拍视频在线观看| 波霸ol色综合久久| 久色乳综合思思在线视频| 亚洲xxxx视频| 亚洲精品小视频| 亚洲国产精品va在看黑人| 久久这里有精品视频| 亚洲精品国产suv| 中文字幕日韩精品在线观看| 国产精品久久视频| www.欧美精品一二三区| 国产欧美日韩精品在线观看| 日韩在线观看网址| 国产精品自拍偷拍视频| 国产日韩欧美自拍| 亚洲男人的天堂在线播放| 日韩亚洲国产中文字幕| 日韩电影中文字幕在线观看| 日韩欧美精品中文字幕| 欧美激情久久久久| 8x拔播拔播x8国产精品| 欧美成人精品一区二区| 在线日韩中文字幕| 日韩亚洲欧美中文高清在线| 久久综合伊人77777蜜臀| 成人免费观看49www在线观看| 色综合天天狠天天透天天伊人| 国产精品久久久久福利| 欧美韩国理论所午夜片917电影| 久久中文字幕在线视频| 国产亚洲一级高清| 一区二区三区四区视频| 综合久久五月天| 91在线网站视频| 97免费中文视频在线观看| 91成人在线播放| 久久久久久久国产精品| 精品呦交小u女在线| 成人黄色激情网|