2012-01-20 161 views
1

我想将单列值转换为行。将列值转换为行

表原件内容:

Code  Amount   Expenditure 
10027 5000.00 LOCAL CONVEYANCE 
10027  320.00 LOCAL CONVEYANCE 
10116 1589.00 TRAVEL EXPENSES 
10095  350.00 LOCAL CONVEYANCE 
10095 1215.00 TRAVEL EXPENSES 

预期输出:

Code LC TE 
10027 5000.00 NULL 
10027 320.00 NULL 
10116 NULL 1589.00 
10095 350.00 1215.00 
+0

如果有一个代码为10027的TE,它应该放在哪里? –

回答

1
;WITH PvtSource AS 
(
SELECT Code, 
     Amount, 
     Expenditure, 
     ROW_NUMBER() OVER (PARTITION BY Code,Expenditure 
           ORDER BY Code) AS RN 
FROM YourTable 
) 
SELECT Code, 
     [LOCAL CONVEYANCE] AS LC, 
     [TRAVEL EXPENSES] AS TE 
FROM PvtSource 
PIVOT (MAX(Amount) FOR Expenditure IN ([LOCAL CONVEYANCE],[TRAVEL EXPENSES])) P 
ORDER BY Code 
0

这里是如何做到这一点的完整示例。关于我在你的问题中提出的评论有一个问题。

create table #original (
Code int, 
Amount float, 
Expenditure varchar(20) 
) 

create table #output (
Code int, 
LC float, 
TE float 
) 

insert into #original values (10027, 5000, 'LOCAL CONVEYANCE') 
insert into #original values (10027, 320, 'LOCAL CONVEYANCE') 
insert into #original values (10116, 1589, 'TRAVEL EXPENSES') 
insert into #original values (10095, 350, 'LOCAL CONVEYANCE') 
insert into #original values (10095, 1215, 'TRAVEL EXPENSES') 



insert into #output 
select o.Code, o.Amount, NULL 
from #original o 
where o.Expenditure = 'LOCAL CONVEYANCE' 

insert into #output 
select o.Code, NULL, o.Amount 
from #original o 
where o.Expenditure = 'TRAVEL EXPENSES' 
and o.Code not in (select Code from #output) 

update #output 
set TE = o.Amount 
from #output p 
inner join #original o on o.Code = p.Code and o.Expenditure = 'TRAVEL EXPENSES' 




select * from #output 

drop table #original 
drop table #output