SQL server 里按年按月进行累计值统计

SQL server 里按年按月进行累计值统计

即 4月 算从1~4月的累计值

参考如下:

select dt,
                        account_set_ord, 
                        account_set_title, 
                        account_ord,
                        account_title,
                        year,
                        ym,
                        cumulative_money_J,
                        cumulative_money_D,
                        row_num
                  from ( 
                        SELECT 
                            dt,
                            account_set_ord, 
                            account_set_title, 
                            account_ord,
                            account_title,
                            year,
                            ym,
                            cumulative_money_J,
                            cumulative_money_D,
                            ROW_NUMBER() OVER (PARTITION BY account_set_ord, account_set_title, account_ord, account_title, year, ym,cumulative_money_J, cumulative_money_D ORDER BY ym) as row_num
                      from ( 
                            SELECT 
                                    @DateThreshold as dt,
                                    account_set_ord, 
                                    account_set_title, 
                                    account_ord,
                                    account_title,
                                    year,
                                    ym,
                                    SUM(income_money) OVER (PARTITION BY account_set_ord, account_set_title, account_ord, account_title, year ORDER BY ym) AS cumulative_money_J,
                                    SUM(expense_money) OVER (PARTITION BY account_set_ord, account_set_title, account_ord, account_title, year ORDER BY ym) AS cumulative_money_D            
                            FROM dws_finance_fund_balance_income_expense_month
                            WHERE dt = @DateThreshold
                      ) t1
                  ) t4
                  where t4.row_num = 1

采用 SUM(expense_money) OVER (PARTITION BY account_set_ord, account_set_title, account_ord, account_title, year ORDER BY ym)  来计算累计值

通过 ROW_NUMBER() OVER (PARTITION BY account_set_ord, account_set_title, account_ord, account_title, year, ym,cumulative_money_J, cumulative_money_D ORDER BY ym) as row_num 来进行过滤

INSERT INTO dbo.dws_finance_fund_balance_month ([dt],[year],[quarter],[ym],[account_set_ord],[account_set_title],[account_ord],[account_title],[income_money],[cumulative_income_money],[expense_money],[cumulative_expense_money])
		SELECT t1.[dt]
			  ,t1.[year]
			  ,t1.[quarter]
			  ,t1.[ym]
			  ,t1.[account_set_ord]
			  ,t1.[account_set_title]
			  ,t1.[account_ord]
			  ,t1.[account_title]
			  ,t1.[income_money]
			  ,t2.cumulative_money_J
			  ,t1.[expense_money]
			  ,t2.cumulative_money_D
		from ( select 
				   [dt]
				  ,[year]
				  ,[quarter]
				  ,[ym]
				  ,[account_set_ord]
				  ,[account_set_title]
				  ,[account_ord]
				  ,[account_title]
				  ,[income_money]
				  ,[expense_money]
			  from dbo.dws_finance_fund_balance_income_expense_month where dt = @DateThreshold
		)t1
		left join (
				   select dt,
						account_set_ord, 
						account_set_title, 
						account_ord,
						account_title,
						year,
						ym,
						cumulative_money_J,
						cumulative_money_D,
						row_num
				  from ( 
						SELECT 
							dt,
							account_set_ord, 
							account_set_title, 
							account_ord,
							account_title,
							year,
							ym,
							cumulative_money_J,
							cumulative_money_D,
							ROW_NUMBER() OVER (PARTITION BY account_set_ord, account_set_title, account_ord, account_title, year, ym,cumulative_money_J, cumulative_money_D ORDER BY ym) as row_num
					  from ( 
							SELECT 
									@DateThreshold as dt,
									account_set_ord, 
									account_set_title, 
									account_ord,
									account_title,
									year,
									ym,
									SUM(income_money) OVER (PARTITION BY account_set_ord, account_set_title, account_ord, account_title, year ORDER BY ym) AS cumulative_money_J,
									SUM(expense_money) OVER (PARTITION BY account_set_ord, account_set_title, account_ord, account_title, year ORDER BY ym) AS cumulative_money_D			
							FROM dws_finance_fund_balance_income_expense_month
							WHERE dt = @DateThreshold
					  ) t1
				  ) t4
				  where t4.row_num = 1
		) t2
		on t1.account_set_ord = t2.account_set_ord and t1.account_ord = t2.account_ord and t1.year = t2.year and t1.ym = t2.ym

相关推荐

  1. SQL server 进行累计统计

    2024-03-22 10:56:01       37 阅读
  2. 数据库表进行分区

    2024-03-22 10:56:01       34 阅读
  3. Oracle中表分区改为分区,数据不变

    2024-03-22 10:56:01       38 阅读
  4. Oracle日周自动分区

    2024-03-22 10:56:01       54 阅读
  5. Mysql8 创建表,/分区存储

    2024-03-22 10:56:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 10:56:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 10:56:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 10:56:01       82 阅读
  4. Python语言-面向对象

    2024-03-22 10:56:01       91 阅读

热门阅读

  1. Android 开发制作系统签名

    2024-03-22 10:56:01       43 阅读
  2. Stream流

    2024-03-22 10:56:01       39 阅读
  3. 1.4 Python有哪些优点和缺点

    2024-03-22 10:56:01       35 阅读
  4. LeetCode28:找出字符串中第一个匹配项的下标

    2024-03-22 10:56:01       42 阅读
  5. 【C#语言入门】21. 抽象类与开闭原则

    2024-03-22 10:56:01       36 阅读
  6. 【单元测试】单元测试之Mockito的使用

    2024-03-22 10:56:01       34 阅读
  7. Oracle数据库进行sql优化的思路和方法

    2024-03-22 10:56:01       44 阅读
  8. unity 等待事件之协程和Invoke

    2024-03-22 10:56:01       37 阅读
  9. Oracle慢sql优化——IS NULL替换为NOT EXISTS

    2024-03-22 10:56:01       47 阅读