2012-01-20 4 views
1

Я хочу преобразовать значения Single Column в строку.Преобразование значения столбца в строку

Таблица Оригинал Содержание:

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

Если был один TE с кодом Code 10027, куда его следует положить? –

ответ

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 
Смежные вопросы