我有一个数据集,其中包含 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
如何显示所需的结果,一列汇总所有未来付款,另一列仅显示当月付款?
您可以使用 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