我是Oracle SQL的新手,我正在尝试执行以下操作:
我列出了仅在一年中的某些星期内销售的产品。 我只是想创建一个完整的年度销售报告,并在那些周内将零销售收入填满零,但保留产品ID作为标识符。
尝试创建该报告,我开始尝试创建一个包含一年中所有星期和产品ID的表格,问题是有数千种产品。我正在尝试获得类似的东西:
WEEK_YR PRODUCT_ID
------ ----------
2018011 Product 1
2018012 Product 1
...
2018053 Product 1
...
2018124 Product 1
...
2018011 Product 2
2018012 Product 2
...
2018053 Product 2
...
2018124 Product 2
然后每周将此表与sales表连接起来,在该表的空周中放入0。
在创建第一个表格时,我需要您的帮助,我只使用带有产品ID的表格进行计数,而其他表格则使用去年的星期列表
谢谢!
答案 0 :(得分:0)
在创建第一个表时,我要求您提供帮助...
您不需要为此创建一个持久表。从Oracle 9.2开始,您可以使用CTE(公用表表达式)。在下面的示例中,cte w
是您要寻找的那个:
with x as ( --- cte that generates numbers from 1 to 52
select 1 as n from dual
union all
select n + 1 from x where n < 52
),
w as ( --- cte that generates the week_yr
select 2018000 + n as week_yr from x
)
select -- main query now.
w.week_yr,
p...
from w
left join products p on p.week_yr = w.week_yr
where ...
group by ...
在上面的查询中,cte x
生成从1到52的数字。然后cte w
生成您需要的week_yr
值。
最后,主查询可以执行您想要的操作。