在 SQL Unpivot 中包含列名
Posted
技术标签:
【中文标题】在 SQL Unpivot 中包含列名【英文标题】:Include Column name in SQL Unpivot 【发布时间】:2021-05-25 17:14:21 【问题描述】:我有一个未标准化的数据集,我需要对其进行标准化以用于报告目的。
SELECT [Id]
,[Timestamp]
,[Question1]
,[Question2]
,[Question3]
,[Question4]
FROM [COS].[dbo].[Sheet2$]
我使用此方法成功地取消了数据透视:
SELECT Id,
Result
FROM (SELECT Id,
Cast([Question1] AS VARCHAR(255)) AS Q1,
Cast([Question2] AS VARCHAR(255)) AS Q2,
Cast([Question3] AS VARCHAR(255)) AS Q3,
Cast([Question4] AS VARCHAR(255)) AS Q4
FROM Sheet2$) AS A
UNPIVOT ( result
FOR questions IN ( Q1,
Q2,
Q3,
Q4 ) ) AS b
如何将列标题 Question1、Question2、Question3、Question4 作为我的 unpivot 查询中的第三列,像这样?
【问题讨论】:
当您编写unpivot( measure for label in (<column_list>))
时,您将获得两列:measure
将保存列中的值(按行)<column_list>
和 label
将保存<column_list>
中的对应列。所以你只需要在选择列表中添加questions
列。
但无论如何,请提供源数据,您当前和期望的输出in text format。您可以为此使用ASCII table generator。
用您正在使用的数据库标记您的问题。
【参考方案1】:
您的语法看起来像 SQL Server。如果是这样,只需使用APPLY
:
SELECT s.id, v.*
FROM Sheet2$ s CROSS APPLY
(VALUES ('Question1', s.Question1),
('Question2', s.Question2),
('Question3', s.Question3),
('Question4', s.Question4)
) v(question, result);
【讨论】:
以上是关于在 SQL Unpivot 中包含列名的主要内容,如果未能解决你的问题,请参考以下文章