我正在寻找将单行数据显示为单列(多行)的方法。例如,
场A场B -------- --------- 1 一些文本 [行] 标头值 [col] ------ ------ 字段A 1 [row1] FieldB SomeText [row2]
有没有办法用 SQL Server 2005 做到这一点?
我正在寻找将单行数据显示为单列(多行)的方法。例如,
场A场B -------- --------- 1 一些文本 [行] 标头值 [col] ------ ------ 字段A 1 [row1] FieldB SomeText [row2]
有没有办法用 SQL Server 2005 做到这一点?
是的,有一个 TSQL 命令,PIVOT。关于这个主题有几个现有的线程;但我不能随便找到一个。
我通常的回答(可能是这些线程中的 5 或 6 个)是考虑在适当的情况下使用 Excel 或 Access - 这是向最终用户提供价值的一种非常简单的方法。但是YMMV。
您可以使用此处解释的unpivot
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
但它通常不灵活且缓慢。您可以使用联合,但在维护方面通常更差,但可能很快(需要检查)或使用动态查询和联合
另一种简单的方法:
从表中选择“FieldA”,将 FieldA 作为值并从表中
选择
“FieldB”,将 FieldB 作为值
但是枢轴确实是您想要尝试的。
像其他几个响应所建议的那样,使用 T-SQL PIVOT 命令。
如果您有权访问 SQL Server Reporting Services,您也可以根据您的简单查询创建报告并使用矩阵报告控件。将您的字段拖放到控件上,您就完成了!
如果您正在寻找特定的东西,即不是通用解决方案,而是为您的特定数据库量身定制的解决方案,那么您可以执行以下操作:
select Field1+';'+convert(nvarchar(255), Field2 )+';'+convert(nvarchar(255),Field3 ) from Table
使用对 nvarchar(255) 的转换,这样无论其中包含什么字符,您都不会遇到问题,请记住在运行 select 之前修复排序规则(否则您永远不知道您的 orderby 和 groupby 会发生什么)。