Ich versuche eine Tabellenvergleichsabfrage zu schreiben, die eine Pass/Fail-Spalte zurückgibt, wenn alle Werte innerhalb einer Zeile nicht gleich sind. Ich habe die grundlegende Syntax, aber es ist das Bestehen/Nichtbestehen des gesamten Datensatzes, nicht die spezifischen Reihen. Nicht sicher, ob ich irgendwo eine Unterabfrage verwenden muss. Vielen Dank!SQL-Tabellenvergleich mit CASE T SQL
Actual Output:
TestID LastName FirstName PrimaryLevel Result
1 Smith John 1 Fail
2 Jones Adam 2 Fail
3 Barker Bob 3 Fail
Expected Output:
TestID LastName FirstName PrimaryLevel Result
1 Smith John 1 Pass
2 Jones Adam 2 Fail
3 Barker Bob 3 Fail
--Code:
declare @TestID int
declare @TestIDExpected varchar(max)
declare @LastNameExpected varchar(max)
declare @FirstNameExpected varchar(max)
declare @PrimaryLevelExpected varchar(max)
declare @TestIDActual varchar(max)
declare @LastNameActual varchar(max)
declare @FirstNameActual varchar(max)
declare @PrimaryLevelActual varchar(max)
set @TestID = 3
set @TestIDExpected = (select TestID from ExpectedResults where TestID = @TestID)
set @LastNameExpected = (select LastName from ExpectedResults where TestID = @TestID)
set @FirstNameExpected = (select FirstName from ExpectedResults where TestID = @TestID)
set @PrimaryLevelExpected = (select PrimaryLevel from ExpectedResults where TestID = @TestID)
set @TestIDActual = (select TestID from ActualResults where TestID = @TestID)
set @LastNameActual = (select LastName from ActualResults where TestID = @TestID)
set @FirstNameActual = (select FirstName from ActualResults where TestID = @TestID)
set @PrimaryLevelActual = (select PrimaryLevel from ActualResults where TestID = @TestID)
select TestID, LastName, FirstName, PrimaryLevel,
case
when @TestIDExpected = @TestIDActual and @LastNameExpected = @LastNameActual and @FirstNameExpected = @FirstNameActual and @PrimaryLevelExpected = @PrimaryLevelActual then 'Pass'
else 'Fail'
END as Result from ActualResults
Können Sie bitte etwas über Ihre Logik ausarbeiten? Warum wird John Smith erwartet und die anderen beiden scheitern? – Mureinik
Kein Problem, danke. John Smith wird übergeben, da alle zurückgegebenen Werte in ExpectedResults und Actual-Ergebnissen = sind. Die anderen zwei Zeilen sind nicht. Wenn ich es jetzt ansehe, kann es sein, dass TestID auf 3 gesetzt ist, wenn ich versuche, alle 3 Tests durchzuführen. – AndrewC10