加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer多行多列数据转为一行

发布时间:2020-12-12 13:26:25 所属栏目:MsSql教程 来源:网络整理
导读:--一行多列转一行--构建临时表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
--一行多列转一行
--构建临时表
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 all
select 1,2,200,30.6
 union all
select 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
		) x
unpivot (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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读