2014-09-30 53 views
0

我有兩個表(表A和表B),我想要在多個列上進行連接。 但對於加入將是值的上表B.總和第三標準在多個列上使用按權重表進行分組的SQL連接

表A

表B

Col1  Col2  Col3 
======================= 
BX1  BY1  0,5   
BX1  BY1  0,5   
BX1  BY2  3  
BX1  BY2  3     
BX2  BY1  1  

所以目的將待加入

A.col1 = B.Col1 
    AND A.Col2 = B.Col2 
    AND A.Col3 = sum(B.Col3) 
GROUP BY 
    B.Col1, B.Col2 

爲了使事情更容易,最終目的是排除表A & B之間的匹配。因此最終結果將是來自表A的記錄,其中總和在表B中不匹配,並顯示來自兩個表的值。 (換句話說,設定一個加入集合B的exluding一套共同的)

結果

Col1  Col2  A.Col3 B.Col3 
================================= 
X1  Y2  7  6  
X1  Y3  9  null 

我已經試過多次全外連接,只服用了null鍵,但從來沒有設法得到正確的結果。我通常只從表中得到X1-Y2值,但不是X1-Y3。

謝謝!

Nikbe

回答

0

試試這個(沒有真正測試),也許還有一個更簡單的解決方案:

SELECT NVL(a.col1, b.col1), 
     NVL(a.col2, b.col2), 
     MAX(a.col3) AS a_col3, 
     MAX(b.col3) AS b_col3 
    FROM ta a 
    FULL 
OUTER 
    JOIN(SELECT col1, 
       col2, 
       SUM(col3) AS col3 
     FROM tb 
     GROUP 
      BY col1, 
       col2 
    ) b 
    ON a.col1 = b.col1 
    AND a.col2 = b.col2 
    AND a.col3 = b.col3 
WHERE b.col3 IS NULL OR a.col3 IS NULL 
GROUP 
    BY NVL(a.col1, b.col1), 
     NVL(a.col2, b.col2) 
1

試試這個:

SELECT A.*, B.col3_sum 
FROM A 
LEFT JOIN (
    SELECT Col1, Col2, SUM(Col3) col3_sum 
    FROM B 
    GROUP BY Col1, Col2 
) B ON A.Col1 = B.Col1 
    AND A.Col2 = B.Col2 
WHERE B.col3_sum IS NULL 
    OR B.col3_sum <> A.Col3 

測試:http://sqlfiddle.com/#!2/23fb77/3

0

謝謝@Rimas & @DirkNM,兩種解決方案都會返回正確的結果!

RIMAS'溶液是更快在執行時,雖然(和更易於閱讀)

COL1 COL2   COL3 COL3_SUM 
---- -------- ---------- ---------- 
X1 20140202   7   6 
X1 20140303   9    


NVL(A.COL1,B.COL1) NVL(A.COL2,B.COL2)  A_COL3  B_COL3 
------------------ ------------------ ---------- ---------- 
X1     20140303     9    
X1     20140202     7   6