我正在寻找将单行数据显示为单列(多行)的方法。例如,
FieldA FieldB ------- --------- 1 Some Text [row] Header Value [col] ------ ------ FieldA 1 [row1] FieldB SomeText [row2]
有没有办法在SQL Server 2005中执行此操作?
答案 0 :(得分:2)
是的,有一个TSQL命令,PIVOT。这个主题有几个现有的主题;但我不能随便找到一个。
我通常的答案(可能是这些主题中的5个或6个)是考虑使用Excel或Access(如果适用) - 这是向最终用户提供价值的一种非常简单的方法。但是YMMV。
答案 1 :(得分:2)
您可以使用unpivot explained here
Declare @tbl Table
(
c1 int,
c2 int,
c3 int
)
Insert into @tbl Values(1,2,3)
Select
cname,
cval
From
(
Select C1,C2,C3 From @tbl
) t
UNPIVOT
(Cval For Cname In
(C1,C2,C3)
)As U
但它通常不灵活且缓慢。你可以使用union,但它在维护方面通常更糟,但可能很快(需要检查)或使用动态查询和联合
答案 2 :(得分:1)
另一种简单的方法:
选择'FieldA',FieldA作为表中的值
工会
选择'FieldB',将FieldB作为表中的值
但是枢纽确实是你想要尝试的。
答案 3 :(得分:1)
与建议的其他几个响应一样,使用T-SQL PIVOT命令。
如果您有权访问SQL Server Reporting Services,您也可以根据简单查询创建报表并使用矩阵报表控件。将字段拖放到控件上,就完成了!
答案 4 :(得分:-1)
如果您正在寻找特定的东西,即不是一般解决方案,而是根据您的特定数据库量身定制的,那么您可以这样做:
select Field1+';'+convert(nvarchar(255), Field2 )+';'+convert(nvarchar(255),Field3 ) from Table
将转换用于nvarchar(255),这样无论问题是什么都不会有问题,请记住在运行select之前修复排序规则(你永远不知道你的orderby和groupby会发生什么) )。