【问题标题】:SQL Select DataSQL 选择数据
【发布时间】:2012-10-31 14:08:51
【问题描述】:

我有一张表,它是客户对产品的还款时间表。

我的表格包含以下字段:

销售ID |付款到期日 |应付金额

每次销售我需要的是:

销售ID |首次付款日期 | FirstPaymentValue |定期付款值 |最终付款价值

每个还款计划都有以下特点:

首付款金额由客户定义。 定期和最终付款由余额决定。

例如

销售 = 200 英镑 期限 = 14 周(14 次付款)

首付款 = 50 英镑 (x1)

定期付款 = 12 英镑 (x12)

最终付款 = 6 英镑 (x1)

请你告诉我如何检索我需要的东西。

补充: 到目前为止的代码:

这是我迄今为止所取得的成就,但这只会让我获得每次销售的首次付款和首次付款日期:

SELECT      
FP.SaleID, FP.FirstPaymentDate, RS.AmountDue AS FirstPayment 
FROM    
(       
SELECT SaleID, MIN(PaymentDueDate)AS FirstPaymentDate       
FROM RepaymentSchedule          
GROUP BY SaleID     
) AS FP 
LEFT OUTER JOIN
RepaymentSchedule AS RS ON FP.SaleID = RS.SaleID AND FP.FirstPaymentDate =   RS.PaymentDueDate ORDER BY RS.SaleID

补充: 数据样本: 14 周内 280 英镑

SaleID  PaymentDueDate            AmountDue
41      2012-08-29 00:00:00.000   120.00
41      2012-09-05 00:00:00.000   12.30
41      2012-09-12 00:00:00.000   12.30
41      2012-09-19 00:00:00.000   12.30
41      2012-09-26 00:00:00.000   12.30
41      2012-10-03 00:00:00.000   12.30
41      2012-10-10 00:00:00.000   12.30
41      2012-10-17 00:00:00.000   12.30
41      2012-10-24 00:00:00.000   12.30
41      2012-10-31 00:00:00.000   12.30
41      2012-11-07 00:00:00.000   12.30
41      2012-11-14 00:00:00.000   12.30
41      2012-11-21 00:00:00.000   12.30
41      2012-11-28 00:00:00.000   12.40

我猜 FinalPaymentValue 不太重要。

真的,我只需要知道如何计算定期付款。

【问题讨论】:

  • 你能举一个存储数据的例子吗?当您说 x12 时,您的意思是 12 行?
  • 您能否解释一下您想如何以SaleID | PaymentDueDate | AmountDue 形式获得SaleID | FirstPaymentDate | FirstPaymentValue | RegularPaymentValue | FinalPaymentvalue
  • 嗨.. 是的,x12 是 12 行。一个 14 周的付款计划将有 14 个条目。

标签: sql-server database select


【解决方案1】:

这应该可行:

SELECT pd.saleid,
       pd.firstpaymentdate                               AS FirstPaymentDate,
       (SELECT amountdue
        FROM   repaymentschedule
        WHERE  saleid = pd.saleid
               AND paymentduedate = pd.firstpaymentdate) AS FirstPaymentValue,
       (SELECT TOP 1 amountdue
        FROM   repaymentschedule
        WHERE  saleid = pd.saleid
               AND paymentduedate <> pd.firstpaymentdate
               AND paymentduedate <> pd.lastpaymentdate) AS RegularPaymentValue,
       (SELECT amountdue
        FROM   repaymentschedule
        WHERE  saleid = pd.saleid
               AND paymentduedate = pd.lastpaymentdate)  AS FinalPaymentValue
FROM   (SELECT saleid,
               Min(paymentduedate) AS FirstPaymentDate,
               Max(paymentduedate) AS LastPaymentDate
        FROM   repaymentschedule
        GROUP  BY saleid) pd 

See it in action

样本结果:

|销售标识 |第一次付款日期 |首付款价值 |常规支付价值 | FINALPAYMENTVALUE | -------------------------------------------------- -------------------------------------------------- ---- | 41 | 2012 年 8 月 29 日 00:00:00+0000 | 120 | 12.3 | 12.4 |

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多