sqlserver行列转换 文1

  1. --一行多列转一行  
  2. --构建临时表  
  3. create table #temp(id int,dataType int,val int,price decimal(10,2));  
  4. --插入数据  
  5. insert into #temp(id,dataType,val,price)  
  6. select 1,1,100,20.5  
  7.  union all  
  8. select 1,2,200,30.6  
  9.  union all  
  10. select 1,3,300,40.7  
  11. --查询数据  
  12. select id,dataType,val,price   
  13.   from #temp;  
  14. --将一列多行转换成一行  
  15. select id,value,valueType+CONVERT(varchar(1),dataType) valueType  
  16.   from (select id,dataType,convert(decimal(10,2),val) val,convert(decimal(10,2),price) cd   
  17.                            --注意:要转换的列要保持类型一致,不然会报错  
  18.           from #temp  
  19.         ) x  
  20. unpivot (value for valueType in (val,cd)) y  
  21. --将多行转换成多列  
  22. select id,val1,cd1,val2,cd2,val3,cd3  
  23.   from (select id,value,valueType+CONVERT(varchar(1),dataType) valueType --注意:不同类型列拼接,注意转换  
  24.           from (select id,dataType,convert(decimal(10,2),val) val,convert(decimal(10,2),price) cd   
  25.                                    --注意:要转换的列要保持类型一致,不然会报错  
  26.                   from #temp  
  27.                 ) x  
  28.         unpivot (value for valueType in (val,cd)) y --注意:如果in()中为数字,用中括号([])括起来。例如:in ([001],[002],[003])  
  29.                                                     --SO问题来了:怎样调用字段?  
  30.                                 --调用字段时,同样采用[001],[002],[003]字段,SQLServer中会把中括号([])解析掉  
  31.                                 --如果比较列标题是否一致时,比如:[001]标题解析为:001,它是否于正常的001一样呢?  
  32.                                 --答案:不一样。建议给这些特殊字段标题起个别名  
  33.         ) m  
  34.   pivot (max(value) for valueType in (val1,cd1,val2,cd2,val3,cd3)) n;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值