我正在尝试编写一个表比较查询,当一行中的所有值都不相等时,它将返回通过/失败列。我有基本的语法,但它是传递/失败整个数据集,而不是特定的行。不知道是否需要在某处使用子查询。谢谢!使用CASE T SQL表比较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
请您详细说明一下您的逻辑?为什么约翰史密斯期望通过,其他两个失败? – Mureinik
没问题,谢谢。 John Smith将通过,因为ExpectedResults和Actual Results中的所有返回值均为=。其他两行不是。现在看,它可能是TestID设置为3,当我试图运行所有3个测试。 – AndrewC10