问题描述
我的表格结构如下
列数大于150。 基本上,我想查询表以查找特定记录,例如ID = 1,它应该返回所有不为空的列名。
我期望下面的输出中,我应该能够仅提取/显示对于特定记录而言其值不为null的那些列名。
请注意,我正在尝试在不支持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'
输出
因此Synapse SQL池(又名Azure SQL DW)也应该完全从此获得。