在Where Condition

时间:2017-07-31 20:38:57

标签: sql-server stored-procedures switch-statement where-clause

我试图找出如何在SQL Server存储过程中具有以下条件。 我有一个@Variance参数,可以有'Y'或'N'或'A'

where条件必须如下:

IF @Variance  = 'Y' THEN
 flag_d ≠ ‘Y’ OR  flag_c ≠ ‘Y’

IF @Variance = 'N' THEN
 flag_d = ‘Y’ AND  flag_c = ‘Y’ 

and If @Variance  = 'A' THEN
Do not check columns flag_c and flag_d.

flag_c和flag_d可以有以下值'Y','N','X'或者它可以是空白的。

有没有办法可以在不使用动态sql的情况下实现这一点。

2 个答案:

答案 0 :(得分:0)

您可以使用Or子句中的简单Where语句执行此操作:

Where   (@Variance = 'Y' And (Flag_D <> 'Y' Or Flag_C <> 'Y'))
Or      (@Variance = 'N' And (Flag_D = 'Y' And Flag_C = 'Y'))
Or      (@Variance = 'A')

答案 1 :(得分:-1)

这样的事情可能会帮助你开始:

CASE
WHEN @Variance = 'Y' THEN outcome
WHEN @Variance = 'N' THEN outcome
WHEN @Variance = 'A' THEN outcome
ELSE something
END

或者如果你需要Y,N和A来做所有不同的事情,那么做多个案例:

CASE
WHEN @Variance = 'Y' THEN outcome1
END,
CASE
WHEN @Variance = 'N' THEN outcome2
END,
CASE
WHEN @Variance = 'A' THEN outcome3
END