在 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 中包含列名的主要内容,如果未能解决你的问题,请参考以下文章

PySpark Sql 列名中包含破折号/连字符

SQL Server如何查找表名或列名中包含空格的表和列

在 BigQuery 的列名中包含特殊字符?

带有查询的链接表在列名中包含“/”

是否可以在 csv 中包含列名以及 Snowflake 中的 copy into 语句?

SQL Server中行列转换 Pivot UnPivot