0

我很难根据一列值对一列不同的值求和,这也需要是不同的。例如,我有:

Index  PaymentID  PaymentAmt PartPmtApplied
  1        35        50          26
  2        35        50          24
  3        36        50          38
  4        36        50          12
  5        37        52          14
  6        37        52          14
  7        37        52          24
  8        38        54          37
  9        38        54          17
 10        39       100         100

我使用的查询如下:

Select sum(paymentamt) from tbl_A where paymentid = 
             (select distinct paymentsid from tbl_A);

所以,我认为我的查询是正确的,但是当我这样做时,它仍然总结了 PaymentAmt 列中的每个值,即我总共收到 564 而不是 256。

有人有更好的方法让我找到这个值吗?提前致谢。

感谢您的快速回复。但是,正如有人问的那样,这就是我要找的东西:

35   50
36   50
37   52
38   54
39  100

总和 = 256。所以,我应该返回一个 256 的值。

4

4 回答 4

3

您实际上可以在没有任何子查询的情况下做到这一点。只需GROUP BY在您的查询中使用。

SELECT  PaymentID, SUM(PaymentAmount) TotalPayment
FROM    tabl_a
GROUP   BY PaymentID

这将为您提供独特的价值,PaymentID其计算出的总量为PaymentAmount

输出

╔═══════════╦══════════════╗
║ PAYMENTID ║ TOTALPAYMENT ║
╠═══════════╬══════════════╣
║        35 ║          100 ║
║        36 ║          100 ║
║        37 ║          156 ║
║        38 ║          108 ║
║        39 ║          100 ║
╚═══════════╩══════════════╝
于 2013-06-01T04:01:35.207 回答
1

您将需要使用 GROUP BY。

SELECT PaymentID, SUM(PaymentAmt) as PaymentTotal FROM tbl_A GROUP BY PaymentID;

这将为每个唯一的 PaymentID 输出一行,以及相应的支付金额总和。干杯。

于 2013-06-01T04:01:26.630 回答
1

如果您需要对不同的值求和,您可以简单地将子查询中的所有内容相加,该子查询仅包含不同的值(或不同的值对)。

所以你可能需要

SELECT SUM( PaymentAmt ) FROM 
  ( SELECT PaymentAmt FROM tabl_a
    GROUP BY PaymentId, PaymentAmt ) distinct_payments;

但是,这将给出 306,将 id 35 和 36 的付款视为分开。如果您真的想获得 256,这将是没有任何链接到 id 的不同付款的总和,那么只需使用GROUP BY PaymentAmt

于 2013-06-01T04:36:50.870 回答
0

您是否正在寻找sum所有的distinct amounts,因为它得到的结果为

SELECT
  sum(TotalPayment) 
FROM
 ( SELECT  
    distinct 
    PaymentAmt TotalPayment
  FROM    
    tableName ) t
于 2013-06-01T04:59:16.550 回答