请问oracle的累加怎么实现。

image.png

FineReport 麦兜的兜 发布于 2022-3-4 14:57 (编辑于 2022-3-4 15:09)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
0
CD20160914Lv8专家互助
发布于2022-3-4 14:59(编辑于 2022-3-4 15:54)

with a as 

(

select '2021-01-01' as date_code,10 as number_s from dual

union all

select '2021-01-02' as date_code,20 as number_s from dual),

b as 

(

select '2021-01-01' as date_code,30 as number_s from dual

union all

select '2021-01-02' as date_code,40 as number_s from dual

union all

select '2021-01-03' as date_code,50 as number_s from dual)

select 

t2.date_code,

tmp1.number_s as A表金额,

tmp2.number_s as b表金额,

nvl(tmp1.number_s,0)-nvl(tmp2.number_s,0) as 相差金额,

sum(nvl(tmp1.number_s,0)-nvl(tmp2.number_s,0)) over(order by t2.date_code) as 累计金额

 from (

/*数据两个表的日期合并起来*/

select t1.date_code from (

select * from a

union all

select * from b) t1

group by t1.date_code

) t2  

left join (select * from a) tmp1 on t2.date_code= tmp1.date_code

left join (select * from b) tmp2 on t2.date_code= tmp2.date_code

image.png

  • 麦兜的兜 麦兜的兜(提问者) 大佬,请问,第二步怎么查询出来,AB表日期有差距我关联少一天
    2022-03-04 15:02 
  • CD20160914 CD20160914 回复 麦兜的兜(提问者) 你弄一个日期维度表呀。先把日期的全取出来。。再关联不就可以了。。做数据分析开发的,最好要有一套完全的日期维度表这样才是最好的。
    2022-03-04 15:21 
  • CD20160914 CD20160914 回复 麦兜的兜(提问者) 你参照上面的语句类似改吧。我是虚拟的数据,所以写得语句多。其实你有表。。语句不用写这么长的。。。
    2022-03-04 15:54 
  • 麦兜的兜 麦兜的兜(提问者) 回复 CD20160914 可以的,用你的解决了,我咋就没想到
    2022-03-04 16:17 
最佳回答
0
胡歌Lv7中级互助
发布于2022-3-4 14:59

sum(字段) over(order by 日期)

  • 麦兜的兜 麦兜的兜(提问者) 大佬,请问,第二步怎么查询出来,AB表日期有差距我关联少一天
    2022-03-04 15:02 
  • 胡歌 胡歌 回复 麦兜的兜(提问者) A表和B表要关联吗?
    2022-03-04 15:06 
  • 麦兜的兜 麦兜的兜(提问者) 回复 胡歌 是的啊,左右全关联都不行啊,AB表的时间的关系不确定的,我想查询的结果的日期为AB表的所有日期去重的结果,然后拿A.VALUE-B.VALUE 没有就按照0来减
    2022-03-04 15:07 
  • 胡歌 胡歌 回复 麦兜的兜(提问者) 字段都一样的话,直接把两个表 union 在一起就行啊,再做处理就行
    2022-03-04 15:09 
  • 麦兜的兜 麦兜的兜(提问者) 回复 胡歌 union之后怎么做处理,请问一下。
    2022-03-04 15:12 
最佳回答
0
snrtuemcLv8专家互助
发布于2022-3-4 14:59
  • 麦兜的兜 麦兜的兜(提问者) 大佬,请问,第二步怎么查询出来,AB表日期有差距我关联少一天
    2022-03-04 15:02 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-3-4 15:04
最佳回答
0
@Lv6资深互助
发布于2022-3-4 15:04(编辑于 2022-3-4 15:07)
  • 麦兜的兜 麦兜的兜(提问者) 左右关联都不行啊,AB表的时间的关系不确定的,我想查询的结果的日期为AB表的所有日期去重的结果,然后拿A.VALUE-B.VALUE 没有就按照0来减
    2022-03-04 15:07 
最佳回答
0
隐藏大佬Lv4见习互助
发布于2022-3-4 15:08(编辑于 2022-3-4 15:12)

看错了,是表A和表B日期关联,然后A的值去减B的值,如果为空则为0,然后得到的结果进行一个累加完事,左右两种都是这样的道理

  • 麦兜的兜 麦兜的兜(提问者) 我改了一下,您看看
    2022-03-04 15:10 
  • 麦兜的兜 麦兜的兜(提问者) 累加搞好了,前面这一步不知道怎么写sql
    2022-03-04 15:15 
  • 隐藏大佬 隐藏大佬 回复 麦兜的兜(提问者) with aa as(select A.日期,A.值,B.值 from A join B on A.日期=B.日期 ) select 日期,sum(A.值-B.值)over(order by 日期) from aa
    2022-03-04 15:21 
  • 麦兜的兜 麦兜的兜(提问者) 回复 隐藏大佬 不行 select A.日期,A.值,B.值 from A join B on A.日期=B.日期 你这一段怎么只查询A.日期
    2022-03-04 15:30 
  • 6关注人数
  • 566浏览人数
  • 最后回答于:2022-3-4 15:54
    请选择关闭问题的原因
    确定 取消
    返回顶部