失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mssql 数据库表行转列 列转行终极方案

mssql 数据库表行转列 列转行终极方案

时间:2022-10-13 16:37:17

相关推荐

mssql 数据库表行转列 列转行终极方案

数据库|mysql教程

mssql,行转列

数据库-mysql教程

招聘网站html 源码,替换为ubuntu系统,tomcat8返回状态码,ajax解析爬虫,任务发布平台php整站源码,seo全网整合lzw

mssql 数据库表行转列,列转行终极方案,需要的朋友可以参考下。

微信红包 牛牛源码,vscode公式面板插件,ubuntu 开权限,tomcat优化详细,sqlite3数据唯一,酷克宠物亚克力爬虫饲养箱,php数组逆序,SEO优化策略,模仿京东的网站有哪些,后台应用刷新自动打开网页,学生管理系统页面模板下载lzw

手机app源码下载,vscode更改终端编码格式,ubuntu usb喇叭,tomcat如何启动服务,爬虫杂志订阅,php 创建zip,闵行seo优化哪家强,网站上线模板源码,wp模板文章里面播放视频lzw

代码如下:

–行转列问题

–建立測試環境

Create Table TEST

(DATES Varchar(6),

EMPNO Varchar(5),

STYPE Varchar(1),

AMOUNT Int)

–插入數據

Insert TEST Select ‘05’, ‘02436’, ‘A’, 5

Union All Select ‘05’, ‘02436’, ‘B’, 3

Union All Select ‘05’, ‘02436’, ‘C’, 3

Union All Select ‘05’, ‘02436’, ‘D’, 2

Union All Select ‘05’, ‘02436’, ‘E’, 9

Union All Select ‘05’, ‘02436’, ‘F’, 7

Union All Select ‘05’, ‘02436’, ‘G’, 6

Union All Select ‘05’, ‘02438’, ‘A’, 7

Union All Select ‘05’, ‘02438’, ‘B’, 8

Union All Select ‘05’, ‘02438’, ‘C’, 0

Union All Select ‘05’, ‘02438’, ‘D’, 3

Union All Select ‘05’, ‘02438’, ‘E’, 4

Union All Select ‘05’, ‘02438’, ‘F’, 5

Union All Select ‘05’, ‘02438’, ‘G’, 1

GO

–測試

–如果STYPE固定,可以這麼寫

Select

DATES,

EMPNO,

SUM(Case STYPE When ‘A’ Then AMOUNT Else 0 End) As A,

SUM(Case STYPE When ‘B’ Then AMOUNT Else 0 End) As B,

SUM(Case STYPE When ‘C’ Then AMOUNT Else 0 End) As C,

SUM(Case STYPE When ‘D’ Then AMOUNT Else 0 End) As D,

SUM(Case STYPE When ‘E’ Then AMOUNT Else 0 End) As E,

SUM(Case STYPE When ‘F’ Then AMOUNT Else 0 End) As F,

SUM(Case STYPE When ‘G’ Then AMOUNT Else 0 End) As G

From TEST

Group By DATES,EMPNO

Order By DATES,EMPNO

–如果STYPE不固定,用動態語句

Declare @S Varchar(1000)

Set @S=”

Select @S=@S+’,SUM(Case STYPE When ”’+STYPE+”’ Then AMOUNT Else 0 End) As ‘+STYPE From (Select Distinct STYPE From TEST) A Order By STYPE

Set @S=’Select DATES,EMPNO’+@S+’ From TEST Group By DATES,EMPNO Order By DATES,EMPNO’

EXEC(@S)

GO

–如果被转置的是数字类型的话,应用下列语句

DECLARE @S VARCHAR(1000)

SET @S=’SELECT DATES,EMPNO ‘

SELECT @S=@S+’,[‘+STYPE+’]=SUM(CASE WHEN STYPE=”’+STYPE+”’ THEN AMOUNT ELSE 0 END)’

FROM (Select Distinct STYPE From TEST) A Order By STYPE

SET @S=@S+’ FROM TEST GROUP BY DATES,EMPNO’

EXEC(@S)

如果是列转行的话直接Union All就可以了

例如 :

city style color 46 48 50 52

长沙 S6MF01002 152 1 2 2 1

长沙 S6MF01002 201 1 2 2 1

上面到下面的样子

city style color size qty

长沙 S6MF01002 152 46 1

长沙 S6MF01002 152 48 2

长沙 S6MF01002 152 50 2

长沙 S6MF01002 152 52 1

长沙 S6MF01002 201 46 1

长沙 S6MF01002 201 48 2

长沙 S6MF01002 201 50 2

长沙 S6MF01002 201 52 1

Select City,Style,Color,[46] From Test

Union all

Select City,Style,Color,[48] From Test

Union all

Select City,Style,Color,[50] From Test

Union all

Select City,Style,Color,[52] From Test

就可以了

如果觉得《mssql 数据库表行转列 列转行终极方案》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。