数据库|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 数据库表行转列 列转行终极方案》对你有帮助,请点赞、收藏,并留下你的观点哦!