SQL 查询 return 列填充最多的行

SQL Query to return rows with the most columns populated

Azure SQL 服务器 2019。

我们有一个 table Table1 包含超过 100 列不同类型的 nvarchar 数据,所有这些都是允许的 NULL 值,并且可能存在给定记录中填充的 1 到 100 列中的任意位置。我需要制定一个查询,returns 行按其中包含值的列数按降序排列。

我开始走上使用 DATALENGTH 的道路,不得不输入每一列的名称,但我只能想象必须有一种更有效的方法。假设列名是 column1column2column3 等,我将如何完成此操作?

将列反透视为行的横向连接怎么样?这只需要枚举列一次,如下所示:

select t.*, c.cnt
from mytable t
cross apply (
    select count(*) cnt
    from (values (t.column1), (t.column2), (t.column3)) x(col)
    where col is not null
) c
order by c.cnt desc