我有两张桌子A和B: 表A
Txn_amt2 rrn Pan Stan Msg_type
22000 7123344 556677 442233 0200
22000 7123344 556677 442233 0200
22000 7123344 556677 442233 0200
22000 7123344 556677 442233 0200
35200 7178866 223344 989898 0200
67000 7199933 667733 343433 0200
表B
Txn_amt1 rrn Pan Stan Msg_type
89000 7123344 556677 442233 0220
35400 7178866 223344 989898 0220
67100 7199933 667733 343433 0220
我需要根据具体情况找到txn_amt1与txn_amt2或sum(txn_amt2)-txn_amt1之差的差异 有两种情况: 1.当表A中的列txn_amt2中存在彼此相等的值时(如表a中22000重复4次),我应该将这些值相加,其中表A的rrn,pan,stan对于重复的值和之后的值相等我必须用表B的Txn_amt1减去总和,其中rrn,pan,stan对于两个表是相等的。 2.当txn_amt2不重复自己时,这意味着该行在表A中只存在一次,我必须用txn_amt2减去txn_amt1,其中两个表的rrn,pan,stan相等。
这是执行查询后我应该期待的结果 diff(txn_amt1 - txn_amt2或sum(txn_amt2)-txn_amt1)
1000
200
100
我需要SQL或查询中的函数。
答案 0 :(得分:0)
您可以将表A和B相加,然后加入。如果TableB没有重复的行,则不需要求和:
SELECT a.rrn, a.Pan, a.Stan, a.Msg_type,
sum(ifnull(b.amt1, 0) - ifnull(a.amt2, 0)) AS amt_diff
FROM (
SELECT rrn,Pan Stan,Msg_type,sum(Txn_amt2) AS amt2
FROM tableA GROUP BY 1,2,3,4
) AS a
JOIN (
SELECT rrn,Pan Stan,Msg_type,sum(Txn_amt1) AS amt1
FROM tableB GROUP BY 1,2,3,4
) AS b ON a.rrn = b.rrn AND a.Stan = b.Stan AND a.Msg_type = b.Msg_type
GROUP BY 1,2,3,4