一栏中显示未来付款的总和,另一栏显示当月付款

问题描述 投票:0回答:1

我有一个数据集,其中包含 ID、当前和未来月份的每月付款、分支机构、地址、城市和国家/地区。我需要显示所有列,其中包含未来每月付款的总和以及下一列中显示的当月付款,如下所示

源数据

身份证 付款 分行 地址 城市 国家 翻译日期
100 25 B1 Axyz C2 2 市 1-2 月
100 25 B1 Axyz C2 2 市 3 月 1 日
100 25 B1 Axyz C2 2 市 4 月 1 日
100 25 B1 Axyz C2 2 市 1-5 月
100 25 B1 Axyz C2 2 市 6 月 1 日
100 10 B1 Axyz C2 2 市 7 月 10 日
103 33 B2 Bxyz C3 3 市 1-2 月
103 33 B2 Bxyz C3 3 市 3 月 1 日
103 33 B2 Bxyz C3 3 市 4 月 1 日
103 11 B2 Bxyz C3 3 市 5月

**转换后的数据**

例如,4 月份执行的 ID 100 的查询将如下所示 (85 = 25+25+25+10) 4 月 + 5 月 + 6 月 + 7 月的付款总和

我需要四月份的产出

身份证 Cum_fut_付款 每月付款 分行 地址 城市 国家
100 85 25 B1 Axyz C2 2 市
103 44 33 B2 Bxyz C3 3 市

我从四月份的查询中得到的输出

身份证 Cum_fut_付款 每月付款 分行 地址 城市 国家
100 85 35 B1 Axyz C2 2 市
103 44 44 B2 Bxyz C3 3 市

对于 ID 100,每月付款相加 (25+10) 和 ID 103 (33+11),而 Monthly_ payment 字段应仅显示当月付款 - ID 100 为 25,ID 103 为 33

我的询问如下

select ID,sum(payments) as cum_fut_payments, sum(payments) as monthly_payments, branch, address, city, country 
from
 ( select
   ID
   sum(payments) as cum_fut_payments,
   payments as monthly_payments,
   branch,
   address,
   city,
   country
   from
   table 1
   group by
     ID, payments,branch,address,city,country) as A
   group by
     ID, payments,branch,address,city,country

如何显示所需的结果,一列汇总所有未来付款,另一列仅显示当月付款?

sql sql-server aggregate common-table-expression
1个回答
0
投票

您可以使用 CTE 来创建两个表,然后将它们重新连接到 id 上。

WITH cum_pymts AS(
select
   ID
   sum(payments) as cum_fut_payments,
   branch,
   address,
   city,
   country
   from
   table 1
   group by
     ID, payments,branch,address,city,country
),
current_month_pymt
SELECT
   ID
   sum(payments) as monthly_payments,
   branch,
   address,
   city,
   country
   from
   table 1

   WHERE
   MONTH(tran_date) = MONTH(GETDATE())
   group by
     ID, payments,branch,address,city,country
)
SELECT
   a.ID,
   a.cum_fut_payments,
   COALESCE(b.monthly_payments, 0) as monthly_pymts
   a.branch,
   a.address,
   a.city,
   a.country
FROM cum_pymts a
LEFT JOIN current_month_pymt b ON
   a.id = b.id
   AND
   a.branch = b.branch
   AND
   a.address = b.address
   AND
   a.city = b.city
   AND
   a.country = b.country
© www.soinside.com 2019 - 2024. All rights reserved.