我有一个需要在Azure SQL DW中将列值动态转换为列标题的要求

问题描述

表结构如下所示(记录总数达到150)

enter image description here

转置后,表结果集应如下所示,其中....代表n列数

enter image description here

基本上,我的想法是动态创建一个临时表,并从select语句定义其列名,以获取结果集,如图2所示。

查询应该类似于---

SELECT * INTO #Cols FROM (select * of above resultset)A WHERE 1=2

注意:-请不要使用FOR XML Path,因为Azure SQL DW当前不支持此功能。

解决方法

我无法验证这项工作,但是,我的searchfu STRING_AGG在Azure数据仓库中可用。我假设它可以访问QUOTENAME,并且也可以访问dynamic statements,所以您可以执行以下操作:

DECLARE @SQL_Start nvarchar(4000) = N'SELECT ',@SQL_Columns nvarchar(4000),@SQL_End nvarchar(4000) = N'INTO SomeTable FROM YourTable WHERE 1 = 2;';

SET @SQL_Columns = (SELECT STRING_AGG(QUOTENAME(ColumnName),',') WITHIN GROUP (ORDER BY ColumnName)
                    FROM (SELECT DISTINCT ColumnName
                          FROM YourTable) YT);

EXEC(@SQL_Start + @SQL_Columns + @SQL_End);

但是,再次, real 解决方案是修复您的设计。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...