SQL 查询返回填充了最多列的行
Posted
技术标签:
【中文标题】SQL 查询返回填充了最多列的行【英文标题】:SQL Query to return rows with the most columns populated 【发布时间】:2020-07-16 20:29:04 【问题描述】:Azure SQL Server 2019。
我们有一个表 Table1
,其中包含超过 100 列不同类型的 nvarchar
数据,所有这些都是允许的 NULL
值,并且在给定记录中可以填充 1 到 100 列。我需要制定一个查询,以降序返回按列中有多少列排序的行。
我开始使用DATALENGTH
并且必须输入每一列的名称,但我只能想象必须有一种更有效的方法。假设列名是column1
、column2
、column3
等,我将如何完成此操作?
【问题讨论】:
请确保您的问题包含minimal reproducible example,即样本数据、预期结果和您的尝试。 不是 sql server exprt(还!),但你不能查询 sys.columns 吗? docs.microsoft.com/en-us/sql/relational-databases/… 您可以旋转表格,以便每个键有 100 多个单独的行,并计算非空值并按 PK 分组。 @Manakin 感谢您的链接,我也绝对不是专家! 如果性能不是优先级,那么您可以尝试使用动态 sql 查询来组合查询。取消透视仍需要您手动列出所有 100 列。 【参考方案1】:横向连接将列转换为行怎么样?这需要仅枚举列一次,如下所示:
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
【讨论】:
以上是关于SQL 查询返回填充了最多列的行的主要内容,如果未能解决你的问题,请参考以下文章
DART SQL 如何从 Dart 中的 SQL 查询结果中读取多行值(多列)?