sql - 在 Join 中使用一个表,其中一个表包含过去三个月的所有日期 - Oracle
问题描述
我有一张表,如下所示:
Date Sales_Quantity
1-JAN-2021 4
5-JAN-2021 5
15-FEB-2021 10
31-MAR-2021 11
我想要的是生成一份报告31-MAR-2021
,在左侧显示过去三个月的所有日期,以及任何没有销售显示为零的日期。
结果应如下所示:
1-JAN-2021,4
2-JAN-2021,0
3-JAN-2021,0
4-JAN-2021,0
5-JAN-2021,5
6-JAN-2021,0
...
...
30-MAR-2021,0
31-MAR-2021,11
我猜我可以通过左外连接来实现这一点,但是如何获得一个包含过去 3 个月所有日期的左表?
任何帮助将不胜感激。谢谢你。
解决方案
您已有的数据:
SQL> select * From test;
DATUM SALES_QUANTITY
----------- --------------
01-jan-2021 4
05-jan-2021 5
15-feb-2021 10
使用 CTE,我正在为今年创建一个日历(sysdate
这样说;您可以为任何一年或您想要的任意年创建它)并将其外部连接到test
表中。
SQL> with calendar as
2 (select trunc(sysdate, 'yyyy') + level - 1 datum
3 from dual
4 connect by level <= add_months(trunc(sysdate, 'yyyy'), 12) -
5 trunc(sysdate, 'yyyy')
6 )
7 select c.datum,
8 nvl(t.sales_quantity, 0) sales_quantity
9 from calendar c left join test t on t.datum = c.datum
10 order by c.datum;
DATUM SALES_QUANTITY
----------- --------------
01-jan-2021 4
02-jan-2021 0
03-jan-2021 0
04-jan-2021 0
05-jan-2021 5
06-jan-2021 0
07-jan-2021 0
08-jan-2021 0
09-jan-2021 0
10-jan-2021 0
11-jan-2021 0
<snip>
推荐阅读
- javascript - ObjMap 返回值或函数
- perl - Perl SOAP::Lite 调用失败
- ibm-cloud - 如何使用 IBM Watson 在意图中标记子实体?
- c++ - C++ fstream读写位置未对齐
- mysql - 使用 JDBC 准备语句查询 MySQL 时是否需要转义下划线?
- javascript - jquery在已经从下拉列表中显示一个div之后显示/隐藏div
- haskell - 用光泽制作地图
- c# - 重新打开响应服务器时,NetMQ 请求/响应有时会失败
- python - RandomFourierFeatures 的停滞损失和准确性
- python-3.x - 是否可以从 topview tkinter 窗口获取输入并从主 tk 窗口中检索保存的输入字段值