Oracle、sqlserver逐月累加
发布日期:2021-05-14 05:50:58 浏览次数:17 分类:精选文章

本文共 1217 字,大约阅读时间需要 4 分钟。

使用OVER函数实现累计计算

当需要对SCRQ(日期)进行累加时,可以通过OVER函数来实现日累计、月累计及年累计的数据计算。以下是各个累计功能的实现方法:

1. 日累计(按天累加)

使用OVER函数对SCRQ进行排序后,对RSJ字段累加。SQL语句如下:

SELECT scrq, rsj, Sum(rsj) OVER(ORDER BY scrq) AS nsj  
FROM tb_test_over
ORDER BY scrq;
  • scrq:表示日期字段,作为排序依据。
  • rsj:被累加的字段。
  • nsj:累加后的结果字段,表示按天累计的RSJ值。

2. 月累计(按月累加)

对于月累计,可以通过PARTITION BY函数来按月份分组,并按SCRQ排序。SQL语句如下:

SELECT scrq, rsj, Sum(rsj) OVER(PARTITION BY to_char(scrq, 'yyyy-mm') ORDER BY scrq) AS ysj  
FROM tb_test_over
ORDER BY scrq;
  • scrq:日期字段。
  • rsj:被累加的字段。
  • ysj:累加后按月的结果字段。
  • to_char(scrq, 'yyyy-mm'):用于将日期格式转换为YYYY-MM形式,便于分组。

3. 综合版:日、月、年累加

可以在同一查询中实现多个累计功能。SQL语句如下:

SELECT scrq, rsj,  
Sum(rsj) OVER(PARTITION BY to_char(scrq, 'yyyy-mm') ORDER BY scrq) AS ysj,
Sum(rsj) OVER(ORDER BY scrq) AS nsj
FROM tb_test_over
ORDER BY scrq;
  • scrq:日期字段。
  • rsj:被累加的字段。
  • ysj:按月累加的结果字段。
  • nsj:按天累加的结果字段。

5. 字符串转行技巧

数据字符串处理

有字符串 A,B,V,C,D,S,A,要求将数据按逗号分隔输出到每行。可以借助REGEXP_SUBSTR函数实现。SQL语句如下:

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;
  • REGEXP_SUBSTR:用于提取不包含逗号的字符序列。
  • ROWNUM:表示行号。
  • LENGTH(...) - LENGTH(...):计算有效字符长度。

逐行输出

通过上述方式,每一个符合条件的字符序列都会被单独输出至一行,实现了字符串按逗号分隔的行性输出。

上一篇:mysql 关闭安全模式
下一篇:色彩搭配

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月10日 17时39分38秒