SQL Pivot 计数不完整和完整

Posted

技术标签:

【中文标题】SQL Pivot 计数不完整和完整【英文标题】:SQL Pivot count incomplete and complete 【发布时间】:2020-08-21 08:54:17 【问题描述】:

首先让我先说我的 SQL 知识非常有限。 所以我有下表

现在我想在 SQL 中创建一个如下所示的数据透视表

现在第二列的 PN 可以不时重复。 虽然我设法计算了完整和不完整,但似乎无法弄清楚如何说 PN 和 EntryDate 组合(连接)是唯一的,并希望以此为基础进行计数(将绿色和黄色行视为相同的 PN)。 基本上如果“已完成”行有数据是完整的,如果 null 是不完整的。

数据库是 MS SQL 感谢所有帮助, 谢谢

【问题讨论】:

【参考方案1】:

使用聚合试试下面的逻辑-

SELECT PN,
SUM(CASE WHEN completed IS NOT NULL THEN 1 ELSE 0 END) Completed,
SUM(CASE WHEN completed IS NULL THEN 1 ELSE 0 END) Incomplete,
COUNT(*) Total
FROM your_table
GROUP BY PN

SELECT PN,
COUNT(completed) Completed,
COUNT(*) - COUNT(completed) Incomplete,
COUNT(*) Total
FROM your_table
GROUP BY PN

正如您评论并希望按 EntryDate 单独记录,您可以执行以下操作-

SELECT PN,
SUM(CASE WHEN completed IS NOT NULL THEN 1 ELSE 0 END) Completed,
SUM(CASE WHEN completed IS NULL THEN 1 ELSE 0 END) Incomplete,
COUNT(*) Total
FROM your_table
GROUP BY PN, EntryDate

【讨论】:

这仅在您不考虑入职日期的情况下才有效 只需在 entrydate 列上应用一个额外的 GROUP BY,例如 - GROUP BY PIN, EntryDate。 我这样做了,但结果不正确` SELECT PN, Convert(VARCHAR(10),EntryDate,101) AS Data, SUM(CASE WHEN Completed IS NOT NULL THEN 1 ELSE 0 END) Completed , SUM(CASE WHEN Completed IS NULL THEN 1 ELSE 0 END) 不完整, COUNT(*) Total FROM CST_MAIN GROUP BY PN, Data ` 使用 ----- GROUP BY PN, Convert(VARCHAR(10),EntryDate,101)

以上是关于SQL Pivot 计数不完整和完整的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL - 如何使用 PIVOT 进行计数

SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句

在 django 映射中如何获得完整的选择字段计数

没有标准的完整计数

优化 MySQL 计数查询,提供完整信息

Oracle 查询:如何将返回的记录限制为计数 > 1 但显示完整结果的记录?