Sql 在联接中使用一个表,其中一个表包含过去三个月的所有日期-Oracle
我有一张表,如下所示:Sql 在联接中使用一个表,其中一个表包含过去三个月的所有日期-Oracle,sql,oracle,join,Sql,Oracle,Join,我有一张表,如下所示: Date Sales_Quantity 1-JAN-2021 4 5-JAN-2021 5 15-FEB-2021 10 31-MAR-2021 11 我想要的是在2021年3月31日生成一份报告,在左侧显示过去三个月的所有日期,如果没有销售,则显示为零 结果应该如下所示: 1-JAN-2021,4 2-JAN-2021,0 3-JAN-2021,0 4-JAN-2021,0 5-JAN-2021,5 6-JAN
Date Sales_Quantity
1-JAN-2021 4
5-JAN-2021 5
15-FEB-2021 10
31-MAR-2021 11
我想要的是在2021年3月31日生成一份报告,在左侧显示过去三个月的所有日期,如果没有销售,则显示为零
结果应该如下所示:
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如是说;您可以为任何年份创建它,也可以创建任意年份,并将其连接到测试表
谢谢您的帮助…我们能为过去6个月左右创建这样的日历吗?不客气。当然可以。确切的代码取决于您过去6个月的调用。
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>