【问题标题】:SQL query to count IDs and display a 0 on empties within a date rangeSQL 查询以计算 ID 并在日期范围内的空白处显示 0
【发布时间】:2013-06-05 22:58:21
【问题描述】:

很抱歉,我知道这种类型的问题已经被问了很多次,但是我看到的帖子似乎不太适合我想要做的事情或有所作为,这是一个简单的解决方案,因为我有一张桌子它存储类型 ID 和保存日期,然后存储另一个具有该类型 ID 和类型名称的表。

我想要的是它会在设定的日期范围内显示所有保存的类型,但显示 0 计数,而不是根本不显示该类型。如果我将查询仅作为计数运行,它会完全符合我的要求

SELECT     dbo.RequestType.Type, COUNT(dbo.Requests.RequestType) AS Count
FROM         dbo.RequestType LEFT OUTER JOIN
                      dbo.Requests ON dbo.RequestType.TypeID = dbo.Requests.RequestType
GROUP BY dbo.RequestType.Type

但是,如果我这样设置日期范围:

SELECT     dbo.RequestType.Type, COUNT(dbo.Requests.RequestType) AS Count
FROM         dbo.RequestType LEFT OUTER JOIN
                      dbo.Requests ON dbo.RequestType.TypeID = dbo.Requests.RequestType
WHERE     (dbo.Requests.DateSaved BETWEEN CONVERT(DATETIME, '2013-01-01 00:00:00', 102) AND CONVERT(DATETIME, '2013-03-30 00:00:00', 102))
GROUP BY dbo.RequestType.Type

那么任何 0 计数都不显示?

谢谢

【问题讨论】:

  • 为什么要转换日期?你试过只做BETWEEN '2013-01-01' AND '2013-03-30'

标签: sql join count


【解决方案1】:

错误是WHERE 子句中的任何内容都将根据记录进行检查,因此如果它引用了 left 外部 right 侧的表加入,取消联接的外部性。只需将该子句移至ON

SELECT     dbo.RequestType.Type, 
  COUNT(dbo.Requests.RequestType) AS Count
FROM dbo.RequestType 
LEFT OUTER JOIN dbo.Requests 
ON dbo.RequestType.TypeID = dbo.Requests.RequestType
  AND     (dbo.Requests.DateSaved 
    BETWEEN CONVERT(DATETIME, '2013-01-01 00:00:00', 102)
    AND CONVERT(DATETIME, '2013-03-30 00:00:00', 102))
GROUP BY dbo.RequestType.Type

【讨论】:

  • 这似乎已经成功了,将做更多的测试。非常感谢!
【解决方案2】:

首先获取不同请求类型的列表,然后在上面加入。

WITH D AS (
    SELECT DISTINCT dbo.RequestType.Type
    FROM dbo.RequestType
)
SELECT     D.Type, COALESCE(COUNT(dbo.Requests.RequestType),0) AS Count
FROM D 
    LEFT OUTER JOIN dbo.RequestType ON D.Type=dbo.RequestType.Type
    LEFT OUTER JOIN dbo.Requests ON dbo.RequestType.TypeID = dbo.Requests.RequestType AND (dbo.Requests.DateSaved BETWEEN CONVERT(DATETIME, '2013-01-01 00:00:00', 102) AND CONVERT(DATETIME, '2013-03-30 00:00:00', 102))
GROUP BY dbo.RequestType.Type

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多