Oracle 、SqlServer 根据日期逐日、逐月递增累加、逐行累加

25 篇文章 3 订阅
本文介绍了如何使用SQL的OVER函数进行数据累计,包括日累计、月累计的实现,以及通过REGEXP_SUBSTR函数将字符串按逗号拆分成多行的技巧。示例中展示了在测试表tb_test_over中对SCRQ和RSJ列的操作,通过窗口函数进行动态累计,并提供了综合查询以展示日、月、年的累加数据。同时,还演示了一种字符串处理方法,将'A,B,V,C,D,S,A'转换为多行输出。
摘要由CSDN通过智能技术生成

动态追加日累计、月累计:

  1. 测试表tb_test_over 中有SCRQ、RSJ两列,存储每日的日数据;
select * from   tb_test_over  ;

这里写图片描述

  1. 使用OVER函数动态追加列,根据SCRQRSJ累计求和;
select scrq,rsj,
sum(rsj) over(order by scrq) as nsj 
from tb_test_over order by scrq;

这里写图片描述

  1. 使用OVER 结合 PARTITION BY 对每月进行累加;
 select scrq,rsj,sum(rsj)  
 over(partition by to_char(scrq,'yyyy-mm')  order by scrq) ysj 
 from tb_test_over 
 order by scrq;

这里写图片描述

  1. 综合版,查询日、月、年累加数据;
select scrq,rsj,
sum(rsj) over(partition by to_char(scrq,'yyyy-mm') order by scrq) ysj,
sum(rsj) over(order by scrq) as nsj 
from tb_test_over 
order by scrq;

这里写图片描述

5、最后追加一个动态字符列转行技巧;
'A,B,V,C,D,S,A'这么一个字符串,根据逗号将数据输出到每行;

SELECT REGEXP_SUBSTR ('A,B,V,C,D,S,A', '[^,]+', 1,ROWNUM) as str
FROM DUAL
CONNECT BY ROWNUM <=
LENGTH ('A,B,V,C,D,S,A') - LENGTH (REPLACE ('A,B,V,C,D,S,A', ',', ''))+1;

这里写图片描述

转载:https://blog.csdn.net/u012324101/article/details/80251003

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值