如何使用数据透视表查找填充列数最多的记录?
How can I use pivot to find the records with the most columns populated?
我有 5 列时遇到问题。
我想做的是在没有空值的列数的末尾添加一个计数。
我正在尝试使用 pivot,因为这似乎是最合乎逻辑的 SQL 子句。对此有什么想法吗?我在很多情况下都没有使用过 Pivot,所以这对我来说是新的。
内联 pivot/conditional 聚合和 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;
我有 5 列时遇到问题。
我想做的是在没有空值的列数的末尾添加一个计数。
我正在尝试使用 pivot,因为这似乎是最合乎逻辑的 SQL 子句。对此有什么想法吗?我在很多情况下都没有使用过 Pivot,所以这对我来说是新的。
内联 pivot/conditional 聚合和 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;