问题描述
表结构如下所示(记录总数达到150)
转置后,表结果集应如下所示,其中....代表n列数
基本上,我的想法是动态创建一个临时表,并从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 解决方案是修复您的设计。