使用 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 >= '15-JUL-2019' AND DATE_CLOSED <= '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 个条件并执行语句的主要内容,如果未能解决你的问题,请参考以下文章