将单个记录(行)显示为单个列

时间:2008-12-23 22:25:23

标签: sql sql-server sql-server-2005 pivot

我正在寻找将单行数据显示为单列(多行)的方法。例如,

FieldA  FieldB
------- ---------
1       Some Text [row]


Header Value [col]
------ ------
FieldA 1          [row1]
FieldB SomeText   [row2]

有没有办法在SQL Server 2005中执行此操作?

5 个答案:

答案 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会发生什么) )。