Sql server 2005 如何在SQLServer2005中切换行和列?

Sql server 2005 如何在SQLServer2005中切换行和列?,sql-server-2005,pivot,Sql Server 2005,Pivot,我在这里看到了很多行到列的线程,但找不到确切的内容 如何转换下表: 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。以下是答

我在这里看到了很多行到列的线程,但找不到确切的内容

如何转换下表:

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。

以下是答案。正如我在评论中提到的,这只适用于已知/固定的维度。首先,样本数据:

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不是实现转换的方法-使用任何使用原始结果的工具来实现这种格式转换。

您可以先执行
取消PIVOT
,然后执行
透视
,但一如既往,它只适用于固定尺寸。而且,像往常一样,必须问一个问题:为什么要用SQL进行报表格式化?行和列在SQL中是不一样的。如果原始表中只有2列,我就使用pivot完成了这项工作。但是对于3个专栏(或更多专栏),我似乎找不到答案。谢谢你的快速回复。我是SQL的新手。。。我应该在哪里进行格式化?@OjRaqueño-在用户应用程序中。