【问题标题】:Case Statement with different operator in Where Condition在 Where 条件中具有不同运算符的案例语句
【发布时间】:2017-07-31 20:38:56
【问题描述】:

我试图弄清楚如何在 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 的情况下实现这一点。

【问题讨论】:

  • 你是想按这个条件过滤,还是根据这个条件输出不同的信息?

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


【解决方案1】:

您可以在Where 子句中使用简单的Or 语句来做到这一点:

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')

【讨论】:

  • 第二个条件应该使用AND而不是OR
【解决方案2】:

这样的事情可能会帮助您入门:

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

【讨论】:

  • 您没有考虑其他字段 - 没有回答问题。
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多