日期:2014-05-17  浏览次数:20489 次

讨教:如何实现列转换成行


如何把上面的表格转换成下面这样的结构
我会只需一列转换成行的,像这种转换几列的数据并合并到一列的,就不知道如何下手了,求转换的方法,谢谢!!
------解决方案--------------------
转换一列会了,两列不就是在一列的基础上 再次转换吗?
------解决方案--------------------

if OBJECT_ID('TableA') is not null
drop table TableA

go
create table TableA
(
单号 nvarchar(10),
材料1名称 nvarchar(20),
材料1重量 int,
材料1价格 int,
材料2名称 nvarchar(20),
材料2重量 int,
材料2价格 int
)

go
insert into TableA values
('P001','A',10,10,'B',20,10),
('P002','B',10,5,'A',20,20),
('P003','C',5,10,'A',5,5),
('P004','B',10,5,NULL,NULL,NULL)

--SQL
select 

单号,

case when 材料1名称='A' then 材料1重量 
     when 材料2名称='A' then 材料2重量
     else null end A重量,
case when 材料1名称='A' then 材料1价格
     when 材料2名称='A' then 材料2价格
     else null end A价格,
     
case when 材料1名称='B' then 材料1重量 
     when 材料2名称='B' then 材料2重量
     else null end B重量,
case when 材料1名称='B' then 材料1价格
     when 材料2名称='B' then 材料2价格
     else null end B价格,
     
case when 材料1名称='C' then 材料1重量 
     when 材料2名称='C' then 材料2重量
     else null end C重量,
case when 材料1名称='C' then 材料1价格
     when 材料2名称='C' then 材料2价格
     else null end C价格
from TableA 


--结果集
/*
单号    A重量  A价格  B重量   B价格   C重量   C价格
P001 10    10    20      10   NULL   NULL
P002 20    20   10   5    NULL   NULL
P003 5    5   NULL   NULL   5       10
P004 NULL   NULL   10   5       NULL    NULL
*/