【问题标题】:How can I use pivot to find the records with the most columns populated?如何使用数据透视查找填充列最多的记录?
【发布时间】:2022-01-04 14:26:46
【问题描述】:

我有一个问题,我有 5 列。

我想要做的是在最后加上一个没有空值的列数。

我正在尝试使用数据透视,因为这似乎是最合乎逻辑的 SQL 子句。对此有什么想法吗?我在很多情况下都没有使用过 Pivot,所以这对我来说是新的。

【问题讨论】:

    标签: sql sql-server pivot case


    【解决方案1】:

    内联枢轴/条件聚合和COUNT 似乎是您想要的。由于所有列都有不同的数据类型,因此您还需要使用一些 CASE 表达式。像这样的:

    SELECT ID,
           a,
           ...
           (SELECT COUNT(V.C)
            FROM (VALUES(CASE WHEN a IS NOT NULL THEN 1 END),
                        (CASE WHEN b IS NOT NULL THEN 1 END),
                        (CASE WHEN c IS NOT NULL THEN 1 END),
                        (CASE WHEN d IS NOT NULL THEN 1 END),
                        (CASE WHEN e IS NOT NULL THEN 1 END),
                        (CASE WHEN f IS NOT NULL THEN 1 END))V(C)) AS NonNullColumns
    FROM dbo.YourTable;
    

    【讨论】:

    • 我不明白 V(c) 别名。当我在小提琴中运行它时,我遇到了一些语法错误。 dbfiddle.uk/…
    • f 应该是 f, @Axwack 。查询中的列需要用逗号分隔。如果您修复了您引入的印刷错误,则查询可以正常工作:db<>fiddle
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2016-05-19
    • 2018-12-15
    相关资源
    最近更新 更多