我很难根据一列值来总结一列不同的值,这些值也需要是不同的。例如,我有:
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的单个值。
答案 0 :(得分: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 ║
╚═══════════╩══════════════╝
答案 1 :(得分:1)
您想要使用GROUP BY。
SELECT PaymentID, SUM(PaymentAmt) as PaymentTotal FROM tbl_A GROUP BY PaymentID;
这会为每个唯一的PaymentID输出一行,并附上相应的付款金额。欢呼声。
答案 2 :(得分:1)
如果你需要对不同的值求和,你可以简单地从一个只包含不同值(或不同的值对)的子查询中求和。
所以你可能需要
SELECT SUM( PaymentAmt ) FROM
( SELECT PaymentAmt FROM tabl_a
GROUP BY PaymentId, PaymentAmt ) distinct_payments;
但是,这将给出306作为结果,将id 35和36的付款视为单独的。如果你真的想要获得256,这将是不同付款的总和而没有任何与ids的链接,那么只需使用GROUP BY PaymentAmt
。
答案 3 :(得分:0)
您是否希望sum
所有distinct amounts
,因为它会得到结果
SELECT
sum(TotalPayment)
FROM
( SELECT
distinct
PaymentAmt TotalPayment
FROM
tableName ) t