SQL2008如何将多行转换成多列
来源:互联网 发布:百分百营销软件流量 编辑:程序博客网 时间:2024/04/24 05:35
SQL2008中有两个函数:
- pivot
- unpivot
1.pivot可实现数据表的列转行
语法如下:
select * from table pivot( 聚合函数(<列名1>) for <列名2> in(<转换的行中列2的值1,转换的行中列2的值2,,...>))
例:
declare @temptable table([name] varchar(100),[saletype] varchar(100),[total] decimal(19,2)) insert into @temptable([name],[saletype],[total])select '客户A','商品A','100'union allselect '客户A','商品A','100'union allselect '客户A','商品B','200'union allselect '客户B','商品A','100'union allselect '客户B','商品B','300'union allselect '客户C','商品C','400'select * from @temptable pivot(sum(total) for [saletype] in (商品A,商品B,商品C)) as pvt
这个方法,可以把某一列的值<列名1>求合后按照<列名2>转换到行上,行上的列名分别为in后面(列名2中的值)中的值,这个方法只能转换一列
2.unpivot可实现数据表的行转列语法如下:
select * from table unpivot(<转换后的值> for <转换后的列> in (<需要转换的列1,需要转换的列2,...>))
declare @temptable1 table([name] varchar(100),total1 decimal(19,2),total2 decimal(19,2),total3 decimal(19,2),total4 decimal(19,2))insert into @temptable1select 'A',1,2,3,4union allselect 'B',11,22,33,44select [name],[n],[v] from @temptable1unpivot(v for n in(total1,total2,total3,total4)) a
注意:在in后面()中的值,是不允许重复的。
pivot函数只能把一列的值转到行上去,但现在有一个表如下
declare @temptable2 table([name] varchar(100),dateday varchar(20),qty decimal(19,2),total decimal(19,2))insert into @temptable2select 'A','1月1号',20,200union allselect 'A','2月2号',10,100union allselect 'A','3月3号',20,200union allselect 'B','2月1号',10,100union allselect 'B','1月1号',20,500union allselect 'C','2月1号',10,100union allselect 'C','2月2号',100,1000现在一行有有两列,一个是qty,一个是total如果才能把这两列的转换到一行上去,现在用pivot好像不行,因为他只能转换一列,现在可以看一下上面的数据,应该按到dataday来转换,但又需要转换两个值。现在可以考虑先用unpivot函数先把行换成列,后再用pivot把列转成行。
select * from (select [name],dateday + n as columname,v from @temptable2 unpivot(v for n in (qty,total)) a) b pivot(sum(v) for [columname] in ([1月1号qty],[1月1号total],[2月2号qty],[2月2号total],[3月3号qty],[3月3号total],[2月1号qty],[2月1号total])) as c
这个地方还需要注意,有可能你的数据库没有设置兼容运用pivot和unpivot会报错,这个地方把SQL2008设置成
exec sp_dbcmptlevel DBName,100
DBName为对应的数据库名
0 0
- SQL2008如何将多行转换成多列
- SQL2008数据类型转换
- 如何彻底删除sql2008
- 如何完全删除sql2008
- 如何卸载sql2008,完全清除
- 如何卸载sql2008,完全清除
- Windows 2003如何安装 SQL2008
- 如何卸载sql2008,完全清除
- 关于如何将SQL2008 R2数据库迁移到SQL2008
- 【SQL2008】
- SQL2008
- sql2008
- sql2008获取的时间格式转换
- 如何在win2003下安装sql2008
- SQL2008如何压缩日志(log)文件?
- SQL2008如何创建定时任务作业
- sql2008 sql2005 如何创建定时作业
- SQL2008如何创建定时任务作业
- Android 初识Retrofit
- python股票推荐
- android自定义控件之飞入飞出控件
- 解决线上问题的办法
- Masonry和UITableView-FDTemplateLayoutCell结合使用时遇过的坑
- SQL2008如何将多行转换成多列
- spring资料整理
- Learning Spark
- spring如何注入Date类型的属性
- 成为杰出的Java程序员只需10招
- HTML5-复选框
- HttpModule的认识
- css布局:圣杯布局
- day11_python多线程基础