Azure SQL DW中的动态方法仅从表中获取其值对于特定记录而言不为空的那些列名

问题描述

我的表格结构如下

enter image description here

列数大于150。 基本上,我想查询表以查找特定记录,例如ID = 1,它应该返回所有不为空的列名。

我期望下面的输出中,我应该能够仅提取/显示对于特定记录而言其值不为null的那些列名。

enter image description here

请注意,我正在尝试在不支持FOR XML Path子句,游标,非常有限的动态sql功能的Azure sql DW中实现此目标。

解决方法

UNPIVOT有效,您不必进行过滤,因为“ UNPIVOT输入中的空值在输出中消失了”,例如

create table #t(id int,col_1 char(1),col_2 char(1),col_3 char(1))
insert into #t values (1,'A',null,'G')
insert into #t values (2,'c',null)

select  id,col,val 
from
  ( select * from #t ) p
unpivot
  ( Val for Col in (col_1,col_2,col_3 ) ) as unpvt
order by id,col;

在Synapse SQL点播中,您也可以使用FOR JSON / OPENJSON进行透视。

create table #t(id int,'G')

select [key] columnName
from openjson(
(
 select * from #t
 where id = 1
 for json path,WITHOUT_ARRAY_WRAPPER 
)) d
where value is not null
and [key] <> 'id'

输出

enter image description here

因此Synapse SQL池(又名Azure SQL DW)也应该完全从此获得。