我是PL / SQL的新手
我正在尝试查询以显示一些购买及其日期。问题是,我希望确保查询结果为每个日期返回一些具有相同行数的分组,具体取决于最大子集的数量。
以下是Oracle的一个示例:
select date_val, cost
from test
order by date_val
这给了我这个结果:
date_val cost
03/04/2017 950907.12
03/04/2017 10935431.88
03/04/2017 1411410
03/04/2017 504604380
04/04/2017 1348410
05/04/2017 1379000560
05/04/2017 1208340
05/04/2017 1735016.32
06/04/2017 15913063.36
06/04/2017 1383744.64
06/04/2017 1522710
06/04/2017 1172111669
07/04/2017 278336734
07/04/2017 579649.52
在这种情况下,最大子集的长度为4(日期03和06),所以我想完成表格并得到这样的结果:
date_val cost
03/04/2017 950907.12
03/04/2017 10935431.88
03/04/2017 1411410
03/04/2017 504604380
04/04/2017 1348410
04/04/2017 0
04/04/2017 0
04/04/2017 0
05/04/2017 1379000560
05/04/2017 1208340
05/04/2017 1735016.32
05/04/2017 0
06/04/2017 15913063.36
06/04/2017 1383744.64
06/04/2017 1522710
06/04/2017 1172111669
07/04/2017 278336734
07/04/2017 579649.52
07/04/2017 0
07/04/2017 0
任何建议都会非常有帮助。
提前致谢!
答案 0 :(得分:3)
这是一种方法:
with t as (
select date_val, cost,
row_number() over (partition by date_val order by cost) as seqnum
from test
)
select d.date_val, coalesce(t.cost, 0) as cost
from (select distinct date_val from t) d cross join
(select distinct seqnum from t) s left join
t
on d.date = t.date and s.seqnum = t.seqnum
order by d.date_val;
这个想法是为每个日期的每一行添加一个序列号。然后,将每个不同的日期与每个不同的序列号交叉连接。这会给你行。 left join
然后提供现有信息。