日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

纵表、横表互转的SQL

發(fā)布時(shí)間:2025/3/15 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 纵表、横表互转的SQL 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

縱表、橫表互轉(zhuǎn)的SQL

By:大志若愚

1、建表:

??? 縱表結(jié)構(gòu) Table_A?

create table Table_A (姓名 varchar(20),課程 varchar(20),成績(jī) int ) insert into Table_A(姓名,課程,成績(jī)) values('張三','語文',60) insert into Table_A(姓名,課程,成績(jī)) values('張三','數(shù)學(xué)',70) insert into Table_A(姓名,課程,成績(jī)) values('張三','英語',80) insert into Table_A(姓名,課程,成績(jī)) values('李四','語文',90) insert into Table_A(姓名,課程,成績(jī)) values('李四','數(shù)學(xué)',100)

?

姓名

課程

成績(jī)

張三

語文

60

張三

數(shù)學(xué)

70

張三

英語

80

李四

語文

90

李四

數(shù)學(xué)

100

?? 橫表結(jié)構(gòu) Table_B

create table Table_B (姓名 varchar(20),語文 int,數(shù)學(xué) int,英語 int ) insert into Table_B(姓名,語文,數(shù)學(xué),英語) values('張三',60,70,80) insert into Table_B(姓名,語文,數(shù)學(xué),英語) values('李四',90,100,0)

?

姓名

語文

數(shù)學(xué)

英語

張三

60

70

80

李四

90

100

0

2、縱表變橫表

縱表結(jié)構(gòu) Table_A?? -->??? 橫表結(jié)構(gòu) Table_B

方法一:聚合函數(shù)[max或sum]配合case語句

select 姓名, sum (case 課程 when '語文' then 成績(jī) else 0 end) as 語文, sum (case 課程 when '數(shù)學(xué)' then 成績(jī) else 0 end) as 數(shù)學(xué), sum (case 課程 when '英語' then 成績(jī) else 0 end) as 英語 from Table_A group by 姓名

方法二:使用pivot

select * from Table_A pivot (max(成績(jī))for 課程 in(語文,數(shù)學(xué),英語)) 臨時(shí)表

3、橫表變縱表

橫表結(jié)構(gòu) Table_B?? -->??? 縱表結(jié)構(gòu) Table_A

方法一:union all

select 姓名,'語文' as 課程,語文 as 成績(jī) from Table_B union all select 姓名,'數(shù)學(xué)' as 課程,數(shù)學(xué) as 成績(jī) from Table_B union all select 姓名,'英語' as 課程,英語 as 成績(jī) from Table_B order by 姓名,課程 desc

方法二:使用unpivot?

select 姓名,課程,成績(jī) from Table_B unpivot (成績(jī) for 課程 in ([語文],[數(shù)學(xué)],英語)) 臨時(shí)表

?說明:在實(shí)際開發(fā)中表名,列名不應(yīng)該使用漢字,在插入的值中有漢字的應(yīng)該用N修飾,以防止出現(xiàn)亂碼,出現(xiàn)意想不到的結(jié)果,可能產(chǎn)生2異性的表名可以用[]修飾。

例如:

  insert into Table_B(name,chinese,math,english) values(N'張三',60,70,80)

  create table [user]

轉(zhuǎn)載于:https://www.cnblogs.com/liushen/p/3333936.html

總結(jié)

以上是生活随笔為你收集整理的纵表、横表互转的SQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。