首页 > 解决方案 > 计算 SQL 表中的填充列数

问题描述

我有一个包含 6 列的 SQL 表。1 个 ID int 列和 5 个日期时间列 Round1、Round2、...、Round5

数据看起来像这样。要么有日期,要么单元格为空。

在此处输入图像描述

我希望查询显示填充的日期时间列的数量。那是

在此处输入图像描述

您能否就如何构建此查询提供一些提示?这会涉及聚合函数吗?

谢谢

标签: sql

解决方案


考虑:

SELECT ID, IIf(Round1 Is Null, 0, 1) + IIf(Round2 Is Null, 0, 1) + 
IIf(Round 3 Is Null, 0, 1) + IIf(Round4 Is Null, 0, 1) + IIf(Round5 Is Null, 0, 1) AS Cnt
FROM Table;

除非您首先使用 UNION 查询规范化数据,否则聚合函数没有帮助。

SELECT ID, Round1 AS Dte, "R1" AS Src FROM table
UNION SELECT ID, Round2, "R2" FROM table
UNION SELECT ID, Round3, "R3" FROM table
UNION SELECT ID, Round4, "R4" FROM table
UNION SELECT ID, Round5, "R5" FROM table;

然后在聚合 SQL 中使用该查询。

SELECT ID, Count(Dte) AS CntD FROM Q1 GROUP BY ID;

推荐阅读