如何解决我有一个需要在Azure SQL DW中将列值动态转换为列标题的要求
表结构如下所示(记录总数达到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 解决方案是修复您的设计。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。