【发布时间】:2022-01-04 14:26:46
【问题描述】:
我有一个问题,我有 5 列。
我想要做的是在最后加上一个没有空值的列数。
我正在尝试使用数据透视,因为这似乎是最合乎逻辑的 SQL 子句。对此有什么想法吗?我在很多情况下都没有使用过 Pivot,所以这对我来说是新的。
【问题讨论】:
标签: sql sql-server pivot case
我有一个问题,我有 5 列。
我想要做的是在最后加上一个没有空值的列数。
我正在尝试使用数据透视,因为这似乎是最合乎逻辑的 SQL 子句。对此有什么想法吗?我在很多情况下都没有使用过 Pivot,所以这对我来说是新的。
【问题讨论】:
标签: sql sql-server pivot case
内联枢轴/条件聚合和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;
【讨论】:
f 应该是 f, @Axwack 。查询中的列需要用逗号分隔。如果您修复了您引入的印刷错误,则查询可以正常工作:db<>fiddle