2017-11-02 2 views
0

Wir haben zwei Tabellen, eine zeigt Ergebnisse aus einem Prozess und eine zeigt Fehler oder andere Ereignisse. Einige der Spalten können kombiniert werden, andere nicht. In jeder Tabelle gibt es eindeutige Spalten, daher kann ich UNION ALL nicht verwenden.Verbinden Sie zwei ähnliche Tabellen mit verschiedenen Spalten

Zum Beispiel habe ich die folgenden Spalten (es gibt mehr, aber Sie bekommen die Idee):

EventID | DateTime | Station | ErrMsg 

ResultID | DateTime | Station | MatNum | SerialNum 

So die ersten drei Spalten in jedem Beispiel Tabelle kombiniert werden könnten, aber die anderen ihre eigene Spalte brauchen .

Die Idee hier ist, die Ergebnisse mit den Fehlern und Reihenfolge nach Datum/Uhrzeit zu überlagern, so dass wir sehen können, ob es irgendwelche Prozessschritte gibt, die Fehler verursachen.

Ich habe verschiedene Joins versucht, Gewerkschaften, ect, aber nicht ganz bekommen, was ich will.

Irgendwelche Gedanken?

+0

Warum können Sie ihnen nicht beitreten und alle Spalten nehmen, die Sie von beiden benötigen? 'events. *, results. *', oder die Namenspalten, die Sie brauchen, natürlich, anstatt alles mit '*' zu nehmen. – panther

+0

Wie viele Spalten gibt es? – SQLChao

+0

Geben Sie Beispieldaten und das gewünschte Ergebnis an. –

Antwort

0

Da die ersten drei Spalten kompatible Datentypen und die anderen nicht you'l müssen separate Spalten für jede der inkompatiblen Spalten. Ich würde auch eine discriminator-Spalte hinzufügen, so dass Sie sofort sagen können, aus welcher Datenquelle die Zeile stammt:

Select 
'E' src, EventID, DateTime, Station, NULL, NULL,  ErrMsg 
from Events 
UNION ALL 
Select 
'R' src, ResultID, DateTime, Station, MatNum, SerialNum, NULL 
from Results 
+0

Danke, mir war nicht bewusst, dass Sie "NULL" für den Spaltennamen beibehalten könnten, wenn in der zweiten Tabelle keine Übereinstimmung vorhanden ist. Ich mag auch die Idee, die Tabellennamen hinzuzufügen, ich habe auf einen Weg gehofft, dies zu tun. – Benaiah2320

1

Dies wäre technisch funktionieren, wenn dies wirklich ist, wie Sie Ihre Ausgabe haben wollen ...

Select 
EventID, DateTime, Station, ErrMsg, NULL 
from Events 
UNION ALL 
Select 
ResultID, DateTime, Station, MatNum, SerialNum 
from Results 
+0

Danke, mir war nicht bewusst, dass Sie "NULL" für den Spaltennamen beibehalten könnten, wenn in der zweiten Tabelle keine Übereinstimmung vorhanden ist. – Benaiah2320

Verwandte Themen