【发布时间】:2015-09-15 14:50:30
【问题描述】:
这与Mysql to select month-wise record even if data not exist 和How to fill in missing months? 有关,但与Oracle 相关,并带有其他数据。我想使用 Crystal Reports 交叉表,但数据需要为零才能获取月份的列(请参阅Keeping same number of columns at cross tab report)
我的查询返回诸如
之类的数据 NewRate OldRate Month Count
Rate1 Rate2 8 1
Rate1 Rate3 2 3
Rate1 Rate3 3 2
Rate1 Rate3 7 2
Rate1 Rate3 8 12
Rate3 Rate1 1 1
Rate3 Rate1 2 1
Rate3 Rate1 5 1
Rate3 Rate1 7 3
Rate3 Rate1 8 9
我想为每个 NewRate 创建一个交叉表,但为了获得每个月的列,我需要返回额外的行,其中包含每个 NewRate 值和所有月份的记录。所以,我需要一个查询来获取以下附加记录(OldRate 只是每个 NewRate 的选项之一)
NewRate OldRate Month Count
Rate1 Rate2 1 0
Rate1 Rate2 2 0
Rate1 Rate2 3 0
Rate1 Rate2 4 0
Rate1 Rate2 5 0
Rate1 Rate2 6 0
Rate1 Rate2 7 0
Rate1 Rate2 9 0
Rate1 Rate2 10 0
Rate1 Rate2 11 0
Rate1 Rate2 12 0
Rate3 Rate1 3 0
Rate3 Rate1 4 0
Rate3 Rate1 6 0
Rate3 Rate1 9 0
Rate3 Rate1 10 0
Rate3 Rate1 11 0
Rate3 Rate1 12 0
我当前的查询有具体的日期,而不仅仅是月份,这可能会更好一些。我愿意使用 2015 年 1 月 1 日、2015 年 2 月 1 日等日期,如果已经有 1 月 5 日,那么添加一个 0 计数的 1 月 1 日不会有任何影响。
但是,我不想为不存在的费率分组添加记录。将 Rate1 到 Rate2 和 Rate1 到 Rate3 都用零就可以了。但由于原始数据集没有 Rate3 到 Rate2,我不想添加这些。汇率是 Oracle 过程的参数,日期范围(也是一个参数)默认为当前日历年。
【问题讨论】: