在使用CASE实现动态where子句时,我得到了一些复杂性。有没有其他方法来解决下面的问题?如果有人能给出任何解决方案,我将不胜感激。
问题:有两个SQL查询需要组合成一个。我尝试了不同的方法来实现它,但失败了。下面我已经提供了“组合查询”,如果条件是通用的(如果在两个查询中只使用了“LIKE”操作),那么它就可以工作,但这里是不同的。“Query-1”包含“LIKE”,因为“Query-2”具有“NOT LIKE”运算符。
查询-1:
SELECT * FROM TABLE_NAME X
WHERE X.COL1 = 10
AND X.LOG_DATE >= TO_DATE('07/01/2016', 'MM/DD/YYYY')
AND X.COL2 LIKE '%DATA-1%'查询-2:
SELECT * FROM TABLE_NAME X
WHERE X.COL1 = 10
AND X.LOG_DATE < TO_DATE('07/01/2016', 'MM/DD/YYYY')
AND X.COL2 NOT LIKE '%DATA-2%'组合查询:
SELECT * FROM TABLE_NAME X
WHERE X.COL1 = 10
AND X.COL2 LIKE
CASE
WHEN (X.LOG_DATE >= TO_DATE('07/01/2016', 'MM/DD/YYYY'))
THEN
'%DATA-1%'
ELSE
'%DATA-2%'
END发布于 2018-01-31 21:38:10
您可以在where子句中使用OR语句,如下所示:
SELECT * FROM TABLE_NAME X
WHERE (X.COL1 = 10
AND X.LOG_DATE >= TO_DATE('07/01/2016', 'MM/DD/YYYY')
AND X.COL2 LIKE '%DATA-1%')
OR
(X.COL1 = 10
AND X.LOG_DATE < TO_DATE('07/01/2016', 'MM/DD/YYYY')
AND X.COL2 NOT LIKE '%DATA-2%')发布于 2018-01-31 21:42:19
解决方案用例(但可能不是问题的最佳解决方案):
select *
from table_name x
where x.col1 = 10
and (case
when (x.log_date >= to_date('07/01/2016', 'MM/DD/YYYY'))
and x.col2 like '%DATA-1%' then
1
when (x.log_date < to_date('07/01/2016', 'MM/DD/YYYY'))
and x.col2 not like '%DATA-2%' then
1
else
0
end) = 1发布于 2018-01-31 21:50:58
可以对这两个查询使用UNION或UNION ALL
https://stackoverflow.com/questions/48543450
复制相似问题