使用 CASE 语句比较 3 个条件并执行语句

Posted

技术标签:

【中文标题】使用 CASE 语句比较 3 个条件并执行语句【英文标题】:Using CASE statement compare 3 conditions and have the statements executed 【发布时间】:2019-07-15 12:53:13 【问题描述】:

我有一个要求,我应该从用户那里获取 3 个动态值,并根据它的匹配与存在的值列表进行比较,我需要使用 case 语句将条件添加到 where 子句。

select *
from   MY_DBSOURCE
WHERE  1=1
And LP_WHERE_REP = (CASE When :LP = 'LIFESHEILD' AND     :M = 'AP' AND :STATUS = 'Processed' THEN flag ='P' and Manual_FLAG = 'P' END)
AND     DATA_SOURCE IN ('LIFESHIELD') 
AND     DATE_CLOSED >= '15-JUL-2019'
AND     DATE_CLOSED <= '16-JUL-2019'

【问题讨论】:

什么是LP_WHERE_REP?那是表格中的一列吗?我觉得你正在尝试类似WHERE flag=CASE When :LP = 'LIFESHEILD' AND :M = 'AP' AND :STATUS = 'Processed' THEN 'P END AND Manual_FLAG=CASE When :LP = 'LIFESHEILD' AND :M = 'AP' AND :STATUS = 'Processed' THEN 'P' END AND DATA_SOURCE IN ('LIFESHIELD') AND DATE_CLOSED &gt;= '15-JUL-2019' AND DATE_CLOSED &lt;= '16-JUL-2019' 其实 LP_WHERE_REP 是我自己的变量,这是不正确的。我正在寻找的是我想比较这 3 个条件(:Lp = 'LIFESHEILD' AND :M = 'AP' AND :P = 'Processed' ) 是动态值,如果它们为真,则 (flag ='P' 和 D_FLAG = 'P') 这 2 个基于条件的选择查询数据必须出现。 【参考方案1】:

CASE 可以在WHERE 中使用,但是 - 语法应该没问题。你的不是。

这是一个示例,它显示了 如何 执行此操作(另外请注意,我将日期文字用于 date_closed;您将其与字符串进行了比较。

select *
from   my_dbsource
where  1=1
and lp_where_rep = case when :lp = 'LIFESHEILD' and :m = 'AP' and :status = 'Processed' then 'P' 
                        when manual_flag = 'P' then 'X'
                        else 'Y'
                   end
and     data_source in ('LIFESHIELD') 
and     date_closed >= date '2019-07-15'
and     date_closed <= date '2019-07-16'

【讨论】:

【参考方案2】:

如果您想在WHERE 子句中使用大小写,那么您可以使用如下内容:

AND (CASE WHEN :LP = 'LIFESHEILD' AND :M = 'AP' AND :STATUS = 'Processed' THEN flag ELSE 'P' END) = 'P'
AND (CASE WHEN :LP = 'LIFESHEILD' AND :M = 'AP' AND :STATUS = 'Processed' THEN Manual_FLAG ELSE 'P' END) = 'P'

干杯!!

【讨论】:

以上是关于使用 CASE 语句比较 3 个条件并执行语句的主要内容,如果未能解决你的问题,请参考以下文章

pgsql使用case条件都不满足怎么去原值

Shell编程之条件语句——if语句case语句

[Linux Shell学习系列六]Shell的条件执行——3case语句

case语句

条件判断语句下篇)

shell脚本——编程条件语句(条件测试if语句case分支语句)