【问题标题】:SQL pivot to transpose dataSQL 转置数据
【发布时间】:2014-03-17 13:18:29
【问题描述】:

我在思考如何使用数据透视(或其他解决方案)来转置数据时遇到了麻烦。我不必担心聚合任何信息,我只想转置行和列。

我有一张表格,每条记录都存储一系列问题的答案。结构看起来像这样,所有问题都是是/否位:

(pk)ID, q1, q2, q3, q4, q5....

我想查询类似

select ID, q1, q2, q3, q4, q5               
from mytable          
where myconditions

并转置它以便我得到

ID 1 2 3 4
q1 1 1 0 1
q2 1 0 0 1
q3 0 0 1 1
q4 1 1 1 1
q5 0 0 1 0

【问题讨论】:

  • 为什么?这在应用程序级别上不是更容易吗?
  • 我最终试图在 SSRS 中为这些数据创建一个报告,但没有找到一种方法来使用表格或矩阵来做我想做的事情。
  • 那么你显然是个盲人......只需使用一个表格并将你从查询中获得的内容拖放到你需要的任何轴上。
  • 也许我在这里遗漏了一些东西,但投标/数据工具中的表格有两行,一个用于标题,一个用于数据。它会自动为数据集中的每条记录添加行。反正我看不到要选择一个轴。

标签: sql sql-server pivot


【解决方案1】:

试试这个

SELECT *
From
(
  select id, col, value
  from mytable
  unpivot
  (
    value
    for col in (q1, q2, q3, q4, q5)
  ) unpiv
) src
pivot
(
  min(value)  
 for ID in ([1],[2],[3],[4])
) piv

Fiddle Demo

操作:

COL 1   2   3   4
q1  1   1   0   1
q2  1   0   0   1
q3  0   0   1   1
q4  1   1   1   1
q5  0   0   1   0

【讨论】:

  • 完美。谢谢!我从未意识到枢轴中的 [1],[2],[3] 是静态文本。我一直认为它们应该是列名或其他东西的占位符,这让我很反感。
  • 我有一两个文本字段,unpivot 不喜欢使用不同的数据类型。如果要旋转的字段之一是 varchar 而不是 bit,任何想法如何修改?
  • 我最终将我的数据粘贴在一个临时表中,该表将所有内容都转换为 nvarchar 并在其上运行 unpivot/pivot。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2017-10-25
相关资源
最近更新 更多