关于 sql:如何根据给定的日期范围显示缺失的日期? | 珊瑚贝

How to Show missing Date based on a given date range?


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

1
2
3
4
5
6
7
8
9
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

我的当前输出是:

1
2
3
Business DATE   Refund Amount
  20160202            14
  20160203            19

应该是:

1
2
3
4
Business DATE   Refund Amount
  20160201             0
  20160202            14
  20160203            19

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

  • 如果您没有建立临时日期表的几种方法.. stackoverflow.com/questions/7812986/… 那么您只需要留下加入即可
  • sqlfiddle.com/#!9/4a420
  • @JamieD77 非常感谢 :)… 现在可以使用


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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]

  • 有关公用表表达式 (CTE) 的更多信息,请查看 stackoverflow.com/a/14275097/122139


来源:https://www.codenong.com/36164691/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9016.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?