当前位置: 首页 > news >正文

sql解决取多个截至每个月的数据

问题:需要查询1月、1-2月、1-3月… 1-12月,分区间的累计数据,在同一个sql语句里面实现。
多个分开查询效率不高,并且数据手动合并麻烦。

with t1 as (
SELECT *,CASE WHEN insutype= '390' THEN '居民'  ELSE '职工' END 人员类别,SUBSTR(enddate,6,2)  月份 FROM sw_sx_20230821test_1_join_two_all_2 WHERE MED_TYPE IN ("21","210104","2403","28","52","71","9938","9940","140201") AND setl_type NOT in ("3")   -- 未退费and REFD_SETL_FLAG =0 -- 有效and VALI_FLAG = 1 and SUBSTR(enddate,1,4)='2022' and insutype in ('310','340','390') ) 
,
t2 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=1and 2022年度参保='1'GROUP by  certno,人员类别 
)
,
t3 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=2and 2022年度参保='1'GROUP by  certno,人员类别 
),
t4 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=3and 2022年度参保='1'GROUP by  certno,人员类别 
),
t5 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=4and 2022年度参保='1'GROUP by  certno,人员类别 
),
t6 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=5and 2022年度参保='1'GROUP by  certno,人员类别 
),
t7 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=6and 2022年度参保='1'GROUP by  certno,人员类别 
),
t8 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=7and 2022年度参保='1'GROUP by  certno,人员类别 
),
t9 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=8and 2022年度参保='1'GROUP by  certno,人员类别 
),
t10 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=9and 2022年度参保='1'GROUP by  certno,人员类别 
),
t11 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=10and 2022年度参保='1'GROUP by  certno,人员类别 
),
t12 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=11and 2022年度参保='1'GROUP by  certno,人员类别 
),
t13 as (SELECT certno,人员类别,sum(fulamt_ownpay_amt)+sum(overlmt_selfpay) 自费,FLOOR((sum(fulamt_ownpay_amt)+sum(overlmt_selfpay))/1000) AS 人头自费费用分组FROM t1WHERE 月份<=12and 2022年度参保='1'GROUP by  certno,人员类别 
)
--SELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,1 截至月份 FROM t2 GROUP by  人员类别,人头自费费用分组 
,
t14 as (
SELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,1 截至月份 FROM t2 GROUP by  人员类别,人头自费费用分组 
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,2 截至月份 FROM t3 GROUP by  人员类别,人头自费费用分组 
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,3 截至月份 FROM t4 GROUP by  人员类别,人头自费费用分组  
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,4 截至月份 FROM t5 GROUP by  人员类别,人头自费费用分组 
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,5 截至月份 FROM t6 GROUP by  人员类别,人头自费费用分组  
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,6 截至月份 FROM t7 GROUP by  人员类别,人头自费费用分组 
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,7 截至月份 FROM t8 GROUP by  人员类别,人头自费费用分组  
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,8 截至月份 FROM t9 GROUP by  人员类别,人头自费费用分组 
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,9 截至月份 FROM t10 GROUP by  人员类别,人头自费费用分组  
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,10 截至月份 FROM t11 GROUP by  人员类别,人头自费费用分组 
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,11 截至月份 FROM t12 GROUP by  人员类别,人头自费费用分组  
UNION  ALLSELECT 人员类别, 人头自费费用分组,sum(自费) 自费,COUNT(certno) 人数,12 截至月份 FROM t13 GROUP by  人员类别,人头自费费用分组 )
SELECT * FROM t14;

代码解读

  1. t1 先做基本处理,可以按照实际业务来。
  2. t2-t13 按每个月截至
  3. t14 将 t2-t13 和在一起
  4. 最后进行输出结果
http://www.lryc.cn/news/139076.html

相关文章:

  • 数据采集:selenium 获取 CDN 厂家各省市节点 IP
  • 【el-tree】树形组件图标的自定义
  • UltralSO软碟通制作Linux系统盘
  • yolov8训练心得 持续更新
  • 超越界限:大模型应用领域扩展,探索文本分类、文本匹配、信息抽取和性格测试等多领域应用
  • Compose - 基本使用
  • Unity3D Pico VR 手势识别
  • 【docker】运行registry
  • java八股文面试[Spring]——如何实现一个IOC容器
  • Redis 列表 | Navicat
  • 【校招VIP】测试专业课之TCP/IP模型
  • leetcode76. 最小覆盖子串(滑动窗口-java)
  • 后端项目开发:整合全局异常处理
  • Linux socket网络编程概述 和 相关API讲解
  • uni-app封装省市区下拉组件(后台获取数据)
  • laravel中Mail发送邮件失败,但是没有错误信息,该如何调试?
  • 软考高级系统架构设计师系列论文八十五:论软件产品线技术
  • More Effective C++学习笔记(4)
  • 概率密度函数 累积分布函数
  • 基于OpenCV实战(基础知识二)
  • PhantomJS+java 后端生成echart图表的图片
  • vue3 基础知识 ( webpack 基础知识)05
  • 1.4亿X区智慧城市数字平台及城市大脑(运营中心)建设项目WORD
  • wps 画项目进度甘特图
  • 【⑭MySQL | 数据类型(二)】字符串 | 二进制类型
  • Java smslib包开发
  • 职业技术培训内容介绍
  • AUTOSAR规范与ECU软件开发(实践篇)6.2 ETAS RTA系列工具入门
  • vue3的hooks你可以了解一下
  • 面试之HTTP