DECLARE @T1 TABLE (ID INT, Val1 VARCHAR(25), Val2 VARCHAR(25));
DECLARE @T2 TABLE (ID INT, Val3 BIT);
DECLARE @T3 TABLE (ID INT, Val4 DECIMAL(18,6));
INSERT INTO @T1 ([ID], [Val1], [Val2])
VALUES (1, 'V1One','V2One')
,(2, 'V1Two','V2Two')
,(3, 'V1Three','V2Three')
,(4, 'V1Four','V2Four');
INSERT INTO @T2 ([ID], [Val3])
VALUES (3, 1);
INSERT INTO @T3 ([ID], [Val4])
VALUES (4, 9.99)
,(5, 0.99);
gewünschte Ausgabe:
ID Val1 Val2 Val3 Val4
1 V1One V2One NULL NULL
2 V1Two V2Two NULL NULL
3 V1Three V2Three 1 NULL
4 V1Four V2Four NULL 9.990000
5 NULL NULL NULL 0.99
Ziel:
So zu kombinieren drei Tabellen basierend auf [ID] -Feld (“ Schlüsselspalte ") und erstellen Sie den gewünschten Ausgang. Wenn ein Datensatz nur in zwei Tabellen vorhanden ist, geben Sie NULL für die Felder der anderen Tabelle zurück - dh ID = 3 und 4 Wenn ein Datensatz in einer Tabelle existiert, aber nicht, geben Sie NULL für das Feld der anderen Tabellen zurück (s) - dh ID = 1, 2 und 5
Die Abfrage muss schnell ausgeführt werden, da der reale Datensatz sehr groß ist und viel komplexer ist.
Mein bisher versuchen ..
SELECT COALESCE([T1].[ID],[T2].[ID],[T3].[ID]), Val1, Val2, Val3, Val4
FROM @T1 T1
CROSS JOIN @T2 T2
CROSS JOIN @T3 T3
--WHERE T1.[ID] = T2.[ID]
--WHERE T1.[ID] = T3.[ID]
Sie können links statt CROSS beitreten –
Aber nicht für diese Abfrage verwenden beitreten :) LEFT würde beitreten nicht in der Lage sein ID hinzufügen 5 von T3. –
Perfecto! Gracias amigo ~ – 007