如何获取客户在sql中支付或必须支付的分期付款数量

时间:2015-04-01 21:13:01

标签: sql sql-server

我想获得客户已为每张账单支付的分期付款数量,以及他们应支付多少分期付款,或者他们支付了部分分期付款,或者他们没有支付。我尝试了这段代码,但是我无法得到真正的结果,要么我得到了付款的分期付款或错误的付费分期付款。

SELECT
  sb.op_id ,
  sb.auto_bill_no as sales_bill_no ,
  sb.installmnts_cont ,
  sb.installmnts_cont - COUNT(cupa.installment_no) as installmnts_net ,
  sb.bill_total
FROM sale_bill as sb
LEFT OUTER JOIN custmrs_paymnts as cupa ON
  sb.installmnt = 1 AND
  sb.installmnt_completed = 0 --AND sb.op_id = cupa.sales_bill_no
WHERE cupa.installment = 1
  AND sb.custmr_id = @cstmr_no
  AND cupa.custmr_id =     @cstmr_no
group by sb.op_id , sb.auto_bill_no , sb.installmnts_cont , sb.bill_total

来自sale_bill表的示例数据:

op_id    auto_bill_no   installmnts_cont installmnt_completed  bill_total
---------------------------------------------------------------------------
55           10               2              true                6000
56           11               2              false               4000

来自custmrs_paymnts表的示例数据:

money_amt         installment    sales_bill_no    installment_no
-----------------------------------------------------------------
3000                  true             55               1
3000                  true             55               2

期望的结果是:

sales_bill_no    installmnts_cont   installmnts_net   bill_total
---------------------------------------------------------------------
55                    2                    0             6000
56                    2                    2             4000

1 个答案:

答案 0 :(得分:0)

我确实发现您的加入条件存在问题。就像那里真的没有。我不确定这是否能解决您的问题,但值得一试:

SELECT . . .
FROM sale_bill sb LEFT OUTER JOIN
     custmrs_paymnts cupa
     ON sb.custmr_id = cupa.custmr_id AND
        cupa.installment = 1
WHERE sb.custmr_id  = @cstmr_no AND
      sb.installmnt = 1 AND
      sb.installmnt_completed = 0

一些规则:

  • 表通常应在ON子句中的表中的列上连接。
  • LEFT JOIN的第一个表格中的条件应该放在WHERE
  • LEFT JOIN的第二个表格中的条件应该放在ON