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

  1. 动态追加日累计、月累计:
select * from   tb_test_over  ;

Oracle 、SqlServer 根据日期逐日、逐月递增累加、逐行累加_第1张图片

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

Oracle 、SqlServer 根据日期逐日、逐月递增累加、逐行累加_第2张图片

  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;

Oracle 、SqlServer 根据日期逐日、逐月递增累加、逐行累加_第3张图片

  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;

Oracle 、SqlServer 根据日期逐日、逐月递增累加、逐行累加_第4张图片

  1. 最后追加一个动态字符列转行技巧; 有’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;

Oracle 、SqlServer 根据日期逐日、逐月递增累加、逐行累加_第5张图片

你可能感兴趣的:(oracle,sqlserver)