Как мне создать IIF, ELSEIF, который сравнивает значения и учитывает пустые значения

Я пытаюсь сравнить значения Field1 и Field2 и включить случаи, когда Null существуют в любом поле (или в некоторых случаях) в обоих.

Field1 | Field2 | Expected      | Condition
-----------------------------------------------------------------
A      | A      | Pass          | Perfect Match
A      | B      | Fail          | Value ofI Field1 does not match Field2
A      | Null   | Investigate   | Field1 has a value but Field2 does not
Null   | Null   | No Version    | Field1 is null and Field2 is null
Null   | A      | Error         | Field1 is null Field2 has a value

Это iif, иначе я наколдовал, но продолжаю выдавать ошибку

=iif((Field1 = Field2, "Pass", "Fail") ELSEIF (Field1 NOT NULL, and Field2 IS NULL, "Manual", "Error"))

оттуда вещи сходят с ума во вложении.

Я начинаю думать, что лучше всего использовать CASE в SQL, поскольку он чище, но я не уверен в подходе.


person Peter Santiago    schedule 08.09.2020    source источник
comment
Вы действительно пробовали использовать чехол? Это довольно просто.   -  person Dale K    schedule 08.09.2020
comment
Вы используете SSRS? Правильный синтаксис сильно зависит от вашей среды кодирования. То, что вы опубликовали, не является допустимым TSQL.   -  person SMor    schedule 09.09.2020
comment
Как вы попали на?   -  person Dale K    schedule 10.09.2020


Ответы (2)


Я бы использовал случай.

Case when field1 is null and field2 is not null then 'Error'
     when field1 is null and field2 is null then 'No Version'
     when field1 is not null and field2 is null then 'Investigate'
     when field1=field2 then 'Pass'
     when field1<> field2 'Fail' 
     else 'Unhandled Case' end as Expected

Гораздо проще увидеть бизнес-правила и поддерживать их в долгосрочной перспективе.

или создайте функцию, которую вы вызываете, которая определяет значение для простоты повторного использования. Если вы планируете использовать эти бизнес-правила снова и снова.

person xQbert    schedule 08.09.2020

case останавливается при первом успехе, поэтому если вы заказываете свои тесты, вы можете упростить логику.

case when Field1 is null and Field2 is null then 'No Version'
when Field1 is null then 'Error'
when Field2 is null then 'Investigate'
when Field1 <> Field2 then 'Fail'
else 'Pass'
end
person Dale K    schedule 08.09.2020