преобразование строки в столбец в sql 2008 - PullRequest
0 голосов
/ 13 мая 2010

Я хочу преобразовать ряд строк в ряд столбцов

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   

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Вы можете использовать тот же подход ранга (), а затем использовать новую функцию 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;
0 голосов
/ 13 мая 2010

Вы не указали правила, по которым что-то должно отображаться в первом столбце по сравнению со вторым столбцом, поэтому я предположил, что это основано на появлении (и, следовательно, сортировке) значения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...