2010-05-13 5 views
0

Я хочу, чтобы преобразовать ряд строк в серию колонокстроку преобразовать в столбце в SQL 2008

create table #cusphone(cusid int,cusph1 int) 
insert into #cusphone values(1,48509) 
insert into #cusphone values(1,48508) 
insert into #cusphone values(1,48507) 
insert into #cusphone values(2,48100) 

так, что выход как этот

  1 48509 48508 48507 
      2 48100 null null 

ответ

0

Вы не указали правила по которому что-то должно появиться в первом столбце против второго столбца, поэтому я догадался, что это основано на вхождении (и, следовательно, сортировке) значения cusph1.

With RankedItems As 
    (
    Select cusid, cusph1 
     , ROW_NUMBER() OVER(PARTITION BY cusid ORDER BY cusph1 DESC) As Num 
    From #cusphone 
    ) 
Select cusid 
    , Min(Case When Num = 1 Then cusph1 End) As Col1 
    , Min(Case When Num = 2 Then cusph1 End) As Col2 
    , Min(Case When Num = 3 Then cusph1 End) As Col3 
From RankedItems 
Group By cusid 
1

Вы можете использовать тот же подход ранга(), а затем использовать новую функцию PIVOT следующим образом:

with cusCte as(
select cusid,cusph1,RANK() over (partition by cusid order by cusph1) r 
from #cusphone) 

SELECT cusid, [1] AS C1, [2] AS C2, [3] AS C3 
FROM 
(SELECT cusid,cusph1,r 
FROM cusCte) p 
PIVOT 
(
MIN (cusph1) 
FOR r IN 
([1], [2], [3]) 
) AS pvt; 
Смежные вопросы