Das Setup:Feld mit 2 verschiedenen Feldern Daten basierend auf Bedingung in SQL
Meine Datenbank hat drei Tabellen, die ich brauche, mit zu arbeiten. Lassen Sie uns die ersten beiden PartList
und PartHist
anrufen. PartList
enthält alle Teilenummern, die auf eine Maschine gehen (Wir nennen dieses Feld ExpectedPart
). PartHist
enthält alle Komponenten, die auf einer Maschine verifiziert wurden (VerifiedPart
). Beide Tabellen enthalten ein MachineID
-Feld, das auf eine bestimmte physische Maschine verweist.
Bisher sieht meine Frage wie folgt:
SELECT
ExpectedPart,
VerifiedPart
FROM
PartList List
LEFT OUTER JOIN PartHist Hist
ON
List.MachineID = Hist.MachineID
AND List.ExpectedPart = Hist.VerifiedPart
Where
List.MachineID = 'SomeID'
Das Problem:
Bisher diese Abfrage sehr gut funktioniert zu sagen, welche Komponenten noch nicht überprüft worden ist, als der Wert von VerifiedPart
ist NULL
bis dieser Teil verifiziert wurde. Außer in einem bestimmten Teil, wo die Teilenummer in der PartList
ist, aber seine Überprüfung wird in einer anderen Tabelle gespeichert (nicht meine Schuld). Auch nach der Überprüfung gibt die Abfrage NULL
für diesen Teil zurück.
Diese dritte Tabelle, wir nennen sie SpecialCase
, hat MachineID
und VerifiedPartSP
Felder. Es gibt auch ein Feld in der Tabelle PartHist
, das "Y" enthält, wenn das Teil eine Instanz dieses Sonderfallteils ist, und "N", wenn dies nicht der Fall ist. Dieses Feld wird SpYesNo
genannt.
Die Frage: Kann ich ein einzelnes Feld in der Abfrage erstellen, die alle überprüften Teile enthält? Ich dachte, irgendwie könnte es eine Möglichkeit sein, ein Zustand, so dass die Verwendung ...
IF (PartHist.SpYesNo = 'Y') THEN use SpecialCase.VerifiedPartSP as VerifiedPart
Ich verwende eine IBM DB2-Datenbank
dies versucht, aber es scheint, dass unsere Datenbank nicht UNION unterstützt (oder Showcase , die unsere Abfragen durchlaufen wird es nicht zulassen) – corbfon
Die CASE-Anweisung funktionierte sofort. Vielen Dank! – corbfon