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-在用户应用程序中。