我想将单列值转换为Row。
表原始内容:
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 :(得分: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
答案 1 :(得分: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