【发布时间】:2020-03-12 22:09:00
【问题描述】:
我的数据库中有两个表:
-
MembershipInstallments(ProjectId, AllotmentId, InstallmentId, EntryDate, AmountPaid) -
Memberships(ProjectId, AllotmentId, ClientId, ClientName, RegistrationNo)
我想选择客户在一年中按月支付的款项。以及当年年初之前支付的金额。我想要的结果集是
假设 2019 年:
ClientName, RegistrationNumbers, PreviouslyPaidAmount (i.e. all amounts paid in 2018), AmountPaidInJuly 2019, AmountPaidInAugust2019. ..... AmountPaidIn Jun2020
其中月份是来自MembershipInstallments 表的EntryDate。
我是这样尝试的,但是对于大数据集来说时间太长了:
SELECT
ClientName, RegistrationNo,
(SELECT ISNULL(SUM(AmountPaid),0)
FROM MembershipInstallments
WHERE ProjectId = Membership.ProjectId
AND AllotmentId = Membership.AllotmentId
AND EntryDate < @fromDate) ASPreviouslyPaid,
(SELECT ISNULL(SUM(AmountPaid), 0)
FROM MembershipInstallments
WHERE ProjectId = Membership.ProjectId
AND AllotmentId = Memberhsip.AllotmentId
AND (MONTH(EntryDate) = 7) AND (YEAR(EntryDate) = YEAR(@fromDate)) AS JulyPayment
FROM
Memberships
WHERE
ProjectId = @projectId
我们将不胜感激。
【问题讨论】:
标签: sql database tsql sql-server-2014