2017-06-18 103 views
1

我有兩個表A和B: 表A兩個表之間計算在SQL

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對於重複的值是相等的,之後我必須減去表B的Txn_amt1之和,其中rrn,pan,stan等於兩個表。 2.當txn_amt2不重複自己,這意味着該行只在表A中存在一次,我必須用txn_amt2減去txn_amt1,其中兩個表的rrn,pan,stan相等。

這是查詢被執行 差異之後,我應該期望的結果(txn_amt1 - txn_amt2或總和(txn_amt2)-txn_amt1)

1000 
200 
100 

我需要在SQL或查詢的功能。

回答

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 
+0

感謝您的回答。我編輯查詢,這應該是:SELECT a.rrn,a.Pan,a.Stan, sum(ifnull(b.amt1,0) - ifnull(a.amt2,0))AS amt_diff FROM SELECT RRN,潘,斯坦,總和(Txn_amt2)AS AMT2 從GROUP BY 1,2,3 ),爲 JOIN( SELECT RRN,潘,斯坦,總和(Txn_amt1)AS AMT1 來自組b BY 1,2,3 )AS b ON a.rrn = b.rrn AND a.Stan = b.Stan GROUP BY 1,2,3 –

相關問題