【发布时间】:2016-03-20 17:25:58
【问题描述】:
我正在尝试编写一个表比较查询,当一行中的所有值都不相等时,该查询返回 Pass/Fail 列。我有基本的语法,但它是传递/失败整个数据集,而不是特定的行。不确定我是否需要在某处使用子查询。谢谢!
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
【问题讨论】:
-
您能详细说明一下您的逻辑吗?为什么预计约翰史密斯会通过而其他两个失败?
-
没问题,谢谢。 John Smith 将通过,因为 ExpectedResults 和 Actual results 中的所有返回值都是 =。其他两行不是。现在看,当我尝试运行所有 3 个测试时,可能是 TestID 设置为 3。
标签: sql sql-server comparison case-when