博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server- 行列转换 行转列,多行转多列 - max 函数用法
阅读量:6232 次
发布时间:2019-06-21

本文共 2428 字,大约阅读时间需要 8 分钟。

 效果如图,把同一个 code, 按 cate 列分为 Actual 和 Budget 两行,再把mode 每种类型转换成 列名 ,主要用到了 max 函数,很实用

 

if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#t')) drop table #t     create table #t(     code varchar(10),   cname nvarchar(30),     fyear varchar(30),     cate varchar(10),     mt numeric(18,4),     amt numeric(18,2),     mode nvarchar(20),     mo_mt numeric(18,4),     mo_avgfee numeric(18,2),     mo_rate nvarchar(20)  )insert into #t select            '400',N'深圳','2017','Actual','280','1400','BLK',10,1,'3.57%' union all select '400',N'深圳','2017','Actual','280','1400','V15',20,2,'7.14%' union all select '400',N'深圳','2017','Actual','280','1400','V5',30,3,'10.71%' union all select '400',N'深圳','2017','Actual','280','1400','V0',40,4,'14.29%' union all select '400',N'深圳','2017','Actual','280','1400','V20',50,5,'17.86%' union all select '400',N'深圳','2017','Actual','280','1400','V10',60,6,'21.43%' union all select '400',N'深圳','2017','Actual','280','1400','V25',70,7,'25.00%' union all select '400',N'深圳','2018','Budget','280','0','BLK',10,1,'3.57' union all select '400',N'深圳','2018','Budget','280','0','V15',20,2,'7.14%' union all select '400',N'深圳','2018','Budget','280','0','V5',30,3,'10.71%' union all select '400',N'深圳','2018','Budget','280','0','V0',40,4,'14.29%' union all select '400',N'深圳','2018','Budget','280','0','V20',50,5,'17.86%' union all select '400',N'深圳','2018','Budget','280','0','V10',60,6,'21.43%' union all select '400',N'深圳','2018','Budget','280','0','V25',70,7,'25.00%' select * from #t --增加一个强制mode 排序,比如从 vo v1 v2 依次排序 if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#sort')) drop table #sort     create Table #sort    (   mode varchar(10),  )  insert into #sort  select distinct mode FROM #t   GROUP BY mode order by mode  -- select * from #sort   declare @sql nvarchar(max)     --声明一个变量 SET @sql = 'SELECT code ' +',cname '+',fyear '+',cate ' --+ N'''类别''' +',isnull(mt,0) mt' -- + N'''吨数''' +',isnull(amt,0) amt'  -- + N'''金额''' select @sql = @sql + ' , max(case mode when ''' + mode+ ''' then mo_rate  else '''' end) [' + mode+ ']'             + ' , max(case mode when ''' + mode+ ''' then mo_avgfee  else 0 end) [' + mode+ '_unit]'from (select  mode FROM #sort ) as a --print @sql set @sql = @sql + ' from #t group by code, cname,fyear,cate,mt,amt  order by code,fyear  ' print @sql   exec(@sql)   --执行该sql

 

转载于:https://www.cnblogs.com/cnishop/p/10723587.html

你可能感兴趣的文章
查找并替换中文字符
查看>>
GRU(Gated Recurrent Unit) 更新过程推导及简单代码实现
查看>>
inline和宏之间的区别
查看>>
Ext文本框添加清除图标,
查看>>
MySql取得日期(前一天、某一天)
查看>>
我们系统中最常见声卡驱动问题和解决
查看>>
hibernate篇章五--Hibernage工作原理
查看>>
网站在线访问人数统计并计算停留时间
查看>>
MQTT
查看>>
求二叉树的高度
查看>>
MongodDB学习笔记(二)(复制)
查看>>
js数据结构描述--栈
查看>>
17. Letter Combinations of a Phone Number C++回溯法
查看>>
【动画】上下滑动
查看>>
sql server 中 syscolumns 各个字段的意义
查看>>
OpenJudge/Poj 1316 Self Numbers
查看>>
37:密码截取(回文串manacher算法)
查看>>
sub,dl,dt,排版,横向滚动条,浮动元素居中,box-sizing
查看>>
「题单」网络流『费用流』
查看>>
红黑树 C++实现
查看>>