2017-07-18 31 views
0

Joining Ich habe folgende Datenzwei Tabellen ohne PK

TABELLE 1

TransID | Ref_Entity | Amount 
--------+------------+-------- 
null | DEPOSIT | 0.00 
null | BANKCHARGES| 0.00 
null | OTHERS  | 0.00 

TABELLE 2

TransID | Ref_Entity | Amount 
--------+------------+--------- 
1  | DEPOSIT | 100.00 
1  | BANKCHARGES| 100.00 
2  | OTHERS  | 150.00 

und möchte die Ausgabe wie folgt haben:

1 | DEPOSIT | 100.00 
1 | BANKCHARGES| 100.00 
1 | OTHERS  |  0.00 
2 | DEPOSIT |  0.00 
2 | BANKCHARGES|  0.00 
2 | OTHERS  | 150.00 

Ich habe versucht:

SELECT 
    * (SELECT '' AS TransID, Ref_Entity, 0.00 AS Amount 
     FROM TABLE1 
     UNION 
     SELECT TransID, Ref_Entity, Amount 
     FROM TABLE2 
    ) 

Danke für die Hilfe.

+0

Das letzte Zeile '1 | ANDERE | 150.00' sollte '2 | sein ANDERE | 150,00 "Richtig? –

+0

@NenadZivkovic, rechts. Ich habe es schon modifiziert. Vielen Dank. – angel

Antwort

0

Sie müssen die unterschiedliche Kombination von TransID und Ref_Entity dann bekommen Sie eine LEFT JOIN auf Table2

WITH Combinations(TransID, Ref_Entity) AS(
    SELECT 
     t2.TransID, t1.Ref_Entity 
    FROM (SELECT DISTINCT Ref_Entity FROM Table1) t1 
    CROSS JOIN (SELECT DISTINCT TransID FROM Table2) t2 
) 
SELECT 
    c.TransID, 
    c.Ref_Entity, 
    Amount = ISNULL(t2.Amount, 0) 
FROM Combinations c 
LEFT JOIN Table2 t2 
    ON c.TransID = t2.TransID 
    AND c.Ref_Entity = t2.Ref_Entity; 

ONLINE DEMO

+0

Es funktioniert, aber ist es geeignet, wenn Tabellen nicht die gleiche Anzahl von Spalten haben. Ich versuche, weitere Spalten/Feldnamen hinzuzufügen (für Table2), und es besagt, dass der Spaltenname ungültig ist. – angel

+0

Entschuldigung. Ich sollte andere Felder in der "Select distinct" -Abfrage hinzufügen. – angel

+0

@angel Sorry, ich habe 'DISTINCT' im Cte hinzugefügt. –

Verwandte Themen