SQLServer多行多列数据转为一行

SQLServer多行多列数据转为一行,第1张

概述--一行多列转一行--构建临时表create table #temp(id int,dataType int,val int,price decimal(10,2));--插入数据insert into #temp(id,dataType,val,price)select 1,1,100,20.5 union allselect 1,2,200,30.6 union allsel
--一行多列转一行--构建临时表create table #temp(ID int,dataType int,val int,price decimal(10,2));--插入数据insert into #temp(ID,dataType,val,price)select 1,1,100,20.5 union allselect 1,2,200,30.6 union allselect 1,3,300,40.7--查询数据select ID,price   from #temp;--将一列多行转换成一行select ID,value,valueType+CONVERT(varchar(1),dataType) valueType  from (select ID,convert(decimal(10,2),val) val,price) cd                            --注意:要转换的列要保持类型一致,不然会报错		  from #temp		) xunpivot (value for valueType in (val,cd)) y--将多行转换成多列select ID,val1,cd1,val2,cd2,val3,cd3  from (select ID,dataType) valueType --注意:不同类型列拼接,注意转换		  from (select ID,price) cd 								   --注意:要转换的列要保持类型一致,不然会报错				  from #temp				) x		unpivot (value for valueType in (val,cd)) y --注意:如果in()中为数字,用中括号([])括起来。例如:in ([001],[002],[003])		                                            --SO问题来了:怎样调用字段?							    --调用字段时,同样采用[001],[003]字段,sqlServer中会把中括号([])解析掉							    --如果比较列标题是否一致时,比如:[001]标题解析为:001,它是否于正常的001一样呢?							    --答案:不一样。建议给这些特殊字段标题起个别名		) m  pivot (max(value) for valueType in (val1,cd3)) n;
总结

以上是内存溢出为你收集整理的SQLServer多行多列数据转为一行全部内容,希望文章能够帮你解决SQLServer多行多列数据转为一行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170824.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存