我有一张表Payments
:
Id ROLE Payment
1 A 100
1 A 100
1 R 50
1 R 50
1 R 50
2 A 100
2 A 100
2 R 50
2 R 50
2 R 100
现在ID是一笔现金贷款(所以我们有两个)。角色A / R意味着有两个ppls支付贷款(A-one guy,R-second guy)。
现在我需要汇总特定ID的所有付款,这仍然可以,但是当角色A的付款与角色R的付款相同时,我只想为SUM计算其中一个..
我试图在同一个表上使用内部联接来解决它,其中id和payment是相同的,角色不同但仍有问题,当我有这个:
2 A 100
2 A 100
2 R 100
结果不是100而是200(我将计算(A100,R100)= 100,A100 = 100)
感谢您的帮助
更新: @Giorgi Nakeuri - 举个例子,结果应该像:
ID Payment
1 350
2 300
更新:为了更好地理解:在给定的例子中(对于id 2)我有100支付R和A所以我们只计算一次= 100,然后我只有一个100支付A = 100,两个支付50只对于R = 100,100 + 100 + 100 = 300付款为id 2
答案 0 :(得分:0)
您是否尝试区分查询?
从 yourTable中选择不同的 yourField
答案 1 :(得分:0)
尝试:
DECLARE @t TABLE ( ID INT, R CHAR(1), P INT )
INSERT INTO @t
VALUES ( 1, 'A', 100 ),
( 1, 'A', 100 ),
( 1, 'R', 50 ),
( 1, 'R', 50 ),
( 1, 'R', 50 ),
( 2, 'A', 100 ),
( 2, 'A', 100 ),
( 2, 'R', 50 ),
( 2, 'R', 50 ),
( 2, 'R', 100 );
WITH cte
AS ( SELECT id ,
P ,
SUM(CASE WHEN R = 'A' THEN 1 ELSE 0 END) cd1 ,
SUM(CASE WHEN R = 'R' THEN 1 ELSE 0 END) cd2
FROM @t
GROUP BY id ,
P
)
SELECT ID ,
SUM(P * CASE WHEN cd1 > cd2 THEN cd1 ELSE cd2 END) AS Sum
FROM cte
GROUP BY ID
输出:
ID Sum
1 350
2 300