微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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)也应该完全从此获得。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。