【问题标题】:display data for dates with no data显示没有数据的日期的数据
【发布时间】:2017-04-29 02:33:09
【问题描述】:

我正在使用以下查询:

SELECT TRUNC (funddate, 'DD') "DATE",
NVL(SUM (amount),0) "TOTAL AMOUNT FUNDED PER DAY"
FROM purchases
WHERE empid= 1234 AND amount < 0
GROUP BY TRUNC (funddate, 'DD');

它给了我这样的数据:

4/24/2017   -1255.32
4/26/2017   -430.36
4/28/2017   -189.92

但我希望数据显示如下:

4/24/2017   -1255.32
4/25/2017    0
4/26/2017   -430.36
4/27/2017    0
4/28/2017   -189.92

我想显示没有购买任何一天的日期和 $0。

谢谢

【问题讨论】:

    标签: oracle11g group-by aggregate-functions


    【解决方案1】:

    问题是如果purchases 中不存在这样的交易日期,那么您的查询将不会捕获它。要解决此问题,您可以对日期列表进行外部连接,可以从其他表中提取,也可以使用 Oracle SQL 函数生成。如果您不想要这么多日期,您可以调整由 q2 别名封装的表格;目前它只获得最后 100 天:

    SELECT q2."DATE", NVL(q."TOTAL AMOUNT FUNDED PER DAY", 0) AS "TOTAL AMOUNT FUNDED PER DAY"
    FROM (
      SELECT TRUNC (funddate, 'DD') "DATE",
      NVL(SUM (amount),0) "TOTAL AMOUNT FUNDED PER DAY"
      FROM purchases
      WHERE empid= 1234 AND amount < 0
      GROUP BY TRUNC (funddate, 'DD')
    ) q
    RIGHT JOIN (
      SELECT TRUNC (SYSDATE - ROWNUM) "DATE"
      FROM DUAL CONNECT BY ROWNUM < 100
    ) q2 
    on q2."DATE" = q."DATE"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2015-08-10
      • 2021-08-26
      • 2020-06-20
      相关资源
      最近更新 更多