【问题标题】:How to Show missing Date based on a given date range?如何根据给定的日期范围显示缺失的日期?
【发布时间】:2016-03-23 05:16:40
【问题描述】:

我有以下查询,它工作正常,它显示了该特定位置的所有值,退款金额是多少。但是,如果我想显示月度报告,我需要在我的表 1 中显示那些日子没有退款,并显示相同的零值:

SELECT businessDate AS 'Business Date'
    ,Sum(convert(DECIMAL, ISNULL(T1.Amount, 0)) * 1) AS 'Refund Amount'
FROM table1 T1
WHERE (
        (T1.id = '1')
        AND (T1.businessDate BETWEEN '20160201' AND '20160229')
        AND (T1.Amount IS NOT NULL)
        )
GROUP BY T1.businessDate

我当前的输出是:

Business Date   Refund Amount
  20160202            14
  20160203            19

应该是:

Business Date   Refund Amount
  20160201             0
  20160202            14
  20160203            19

那么如何修复我的查询以满足上述问题??

【问题讨论】:

标签: sql sql-server sql-server-2008 sql-server-2012


【解决方案1】:

我将使用递归 CTE,如下所示:

WITH cte
AS
    (
        SELECT CAST('2016-02-01' AS date) [Date]
        UNION ALL
        SELECT DATEADD(DAY, 1, [Date])
        FROM cte
        WHERE DATEADD(DAY, 1, [Date]) <= '2016-02-29'
    )

SELECT
    cte.[Date] [Business Date]
    , SUM(CONVERT(decimal, ISNULL(T1.Amount, 0)) * 1) [Refund Amount]
FROM
    cte
    LEFT JOIN (SELECT * FROM table1 WHERE id = 1) T1 ON cte.[Date] = T1.businessDate
GROUP BY cte.[Date]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多