【问题标题】:Joined tables - how to aggregate problem (sum)?连接表 - 如何汇总问题(总和)?
【发布时间】:2021-03-22 06:34:50
【问题描述】:

我有两个这样连接的表:

SELECT count(DISTINCT T1.ContractNumber) AS nr_of_contracts,
       count(T3.DateofInstallmentPayment) AS nr_of_paid_installents, 
       count(T3.DateofDueInstallment) AS nr_of_installments, 
       sum(T1.DisbursementAmount) AS disbursed_amount

FROM q.T1
LEFT JOIN q.T3
ON T1.ContractNumber=T3.ContractNumber

WHERE   DateOfDisbursement BETWEEN '2019-12-01' AND '2019-12-31'
        AND T3.DateofDueInstallment < GETDATE()

其中 T1 表包含有关客户的数据(按合同编号),T3 包含有关其付款计划的数据(按每期付款)。

我想要的是从表 T1(按合同编号汇总)中支付合同的金额(支付金额),而不是按每期付款。当我尝试只选择 sum(T1.Disbursement amount) 时,我收到了 sum,但所有分期付款都不正确。

T1:

Contract Number DisbursementDate Disbursement Amount
1 2019-12-01 1000
2 2019-12-01 2000
3 2019-12-01 3000

T3:

Contract Number DateofDueInstallment DateofInstallmentPayment
1 2020-01-01 2020-01-01
1 2020-02-01 2020-02-06
1 2020-03-01 2020-04-01

在为 Contract Number = 1 加入两个表后,我得到的是 sum(DisbursementAmount) = 3000。

Contract Number sum(DisbursementAmount)
1 3000

在为 Contract Number = 1 加入两个表后,我想要的是 sum(DisbursementAmount) = 1000。

Contract Number sum(DisbursementAmount)
1 1000

【问题讨论】:

  • 请发布表格架构、示例数据和所需结果,最好使用dbfiddle.uk等在线工具
  • T1: ContractNumber, Product, Nr of Installment, DisbursementAmount T3: ContractNumber, Number_of_installment, Installment_amount_due, Installment_amount_payed 我想在每一行中查看连接结构(T1 和 T3)中 Installments_amount_payed 的总和相同的金额(所有分期付款的总和,按合同编号而不是按分期付款的数量分组)。
  • 我编辑了问题并简化了它。
  • 采样日期 + 预期结果,即 minimal reproducible example 真的很有帮助。
  • 好的,我希望这个问题现在是可见的。可以吗?

标签: sql-server tsql join aggregation


【解决方案1】:

类似的东西,未经测试 - 具有不同聚合列的子查询

SELECT T1.product, T1.NrOfInstallment, count(DISTINCT T1.ContractNumber), 
           SELECT paid_amound FROM(SELECT ContractNumber, sum(tt.DisbursementAmount + (tt.ContractNumber*0.01))  
                    - sum(tt.ContractNumber*0.01) as paid_amount
    FROM abc.T1 as tt  WHERE tt.ContractNumber = T1.ContractNumber GROUP BY ContractNumber) AS t)                           
    FROM abc.T1
    LEFT JOIN bde.T3
    ON T1.ContractNumber=T3.ContractNumber
    GROUP BY T1.product, T1.NrOfInstallment

【讨论】:

  • 我改变了一点我的选择来简化问题。你现在能帮忙吗?
猜你喜欢
  • 2016-01-23
  • 2019-06-01
  • 2021-01-31
  • 2011-12-05
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2022-10-09
相关资源
最近更新 更多