将Column值转换为Row

时间:2012-01-20 10:47:17

标签: sql-server-2005

我想将单列值转换为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

2 个答案:

答案 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