【问题标题】:SQL Query to return rows with the most columns populatedSQL 查询返回填充了最多列的行
【发布时间】:2020-07-16 20:29:04
【问题描述】:

Azure SQL Server 2019。

我们有一个表 Table1,其中包含超过 100 列不同类型的 nvarchar 数据,所有这些都是允许的 NULL 值,并且在给定记录中可以填充 1 到 100 列。我需要制定一个查询,以降序返回按列中有多少列排序的行。

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

【问题讨论】:

  • 请确保您的问题包含minimal reproducible example,即样本数据、预期结果和您的尝试。
  • 不是 sql server exprt(还!),但你不能查询 sys.columns 吗? docs.microsoft.com/en-us/sql/relational-databases/…
  • 您可以旋转表格,以便每个键有 100 多个单独的行,并计算非空值并按 PK 分组。
  • @Manakin 感谢您的链接,我也绝对不是专家!
  • 如果性能不是优先级,那么您可以尝试使用动态 sql 查询来组合查询。取消透视仍需要您手动列出所有 100 列。

标签: sql-server string count sql-order-by unpivot


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多