gpt4 book ai didi

sql - 如何在 SQL SERVER 查询中显示零计数

转载 作者:行者123 更新时间:2023-12-04 14:12:25 25 4
gpt4 key购买 nike

我想知道我们如何显示零计数?我只有一个表,我正在做每月计数,但有些时候 1 个月没有任何行,SQL Server 在计数期间跳过了那个月,但我需要在我的报告中显示。

这是我正在使用的查询:

SELECT 
MONTH(createdDate) [Month],
ISNULL(COUNT(id), 0) [Count]
FROM
[PocketLife].[dbo].[Notifications]
WHERE
description = 'Welcome to Pocket Link' AND
YEAR(CAST(createdDate as DATE)) = YEAR(GETDATE())
GROUP BY
MONTH(createdDate)

目前上面的查询是这样显示的,但是它缺少第一个月的记录,它是零。

Month   Count
--------------
2 5
3 295
4 8295
5 149855
6 447752
7 6311

但它应该如下所示,这是实际结果:

Month   Count
--------------
1 0
2 5
3 295
4 8295
5 149855
6 447752
7 6311

我们将不胜感激。

最佳答案

您可以使用范围从 1 到 12 的计数表作为月份列表,然后对您的查询执行 LEFT JOIN。为 N 添加一个额外的过滤器,以便它只返回当前月份的记录。

用您的原始查询替换 Cte 的内容。

WITH Cte([Month], [Count]) AS(
SELECT 2, 5 UNION ALL
SELECT 3, 295 UNION ALL
SELECT 4, 8295 UNION ALL
SELECT 5, 149855 UNION ALL
SELECT 6, 447752 UNION ALL
SELECT 7, 6311
),
CteTally(N) AS(
SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL
SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL
SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL
SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
)
SELECT
t.N AS [Month],
ISNULL(c.Count, 0) AS [Count]
FROM CteTally t
LEFT JOIN Cte c
ON t.N =c.Month
WHERE
t.N <= MONTH(GETDATE())

关于sql - 如何在 SQL SERVER 查询中显示零计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com