Как вы переключаете строки и столбцы в SQL Server 2005? - PullRequest
0 голосов
/ 10 февраля 2012

Я видел много потоков строк-столбцов, но не могу найти именно то, что ищу.

Как преобразовать следующую таблицу:

ID    Foo    Bar
1     A      F
2     B      G
3     C      H
4     D      I
5     E      J

В это:

ID    1    2    3    4    5
Foo   A    B    C    D    E
Bar   F    G    H    I    J

Спасибо! Кстати, я использую SQL Server 2005.

1 Ответ

0 голосов
/ 12 февраля 2012

Вот и ответ. Как я упоминал в своем комментарии, это работает только в тех измерениях, с которыми вы работаете, которые известны / исправлены. Сначала образец данных:

declare @Table table (ID int not null,Foo char(1) not null,Bar char(1) not null)
insert into @Table (ID,Foo,Bar)
select 1,'A','F' union all
select 2,'B','G' union all
select 3,'C','H' union all
select 4,'D','I' union all
select 5,'E','J'

select * from @Table --As per your original data table

;with Rot1 as (
    select
        *
    from
        @Table unpivot (Value for Col in (Foo,Bar)) t
)
select * from Rot1 -- See below

;with Rot1 as (
    select
        *
    from
        @Table unpivot (Value for Col in (Foo,Bar)) t
), Rot2 as (
    select
        *
    from Rot1 pivot (MAX(Value) for ID in ([1],[2],[3],[4],[5])) t
)
select * from Rot2 -- As per your required result

Выход при простом выборе из Rot1:

ID  Value   Col
1   A   Foo
1   F   Bar
2   B   Foo
2   G   Bar
3   C   Foo
3   H   Bar
4   D   Foo
4   I   Bar
5   E   Foo
5   J   Bar

Итак, мы можем построить этот запрос, если мы знаем всех идентификаторов перекрестных ссылок, например, Foo, Bar, 1, 2, 3, 4 и 5. В большинстве случаев, когда вы хотите выполнить такое преобразование, вы не знаете всех этих значений, и поэтому SQL не является способом достижения преобразования - используйте любой инструмент, который потребляет исходные результаты для достижения такого рода переформатирования.

...