oracle 根据值更改WHERE子句中的条件

jmp7cifd  于 7个月前  发布在  Oracle
关注(0)|答案(1)|浏览(108)

我在SQL查询中有这个WHERE子句:

WHERE ta.year = 2023 and (0=25 or dep1.code = 25) and (0=0 or d.code = 0) and (0=0 or sg.group_code = 0) and (0=0 or sf.code = 0)

字符串
所以我需要根据我得到的参数改变其中一个条件。它的 (0=25或dep1.code = 25)
如果请求接受参数25、30或50,我需要使用 (0=25或dep1.code = 25) else (0=10或a.分支= 10)
就像我需要这样的东西:

If (parameter == 25) 
{
where clause = (0=25 or dep1.code = 25)
}
else where clause = (0=10 or a.branch= 10)


我需要的解决方案内的sql查询,因为即时通讯使用birt

mu0hgdu0

mu0hgdu01#

使用ANDOR

WHERE (   parameter = 25
      AND (0 = 25 OR dep1.code = 25))
OR    (   (parameter != 25 OR parameter IS NULL)
      AND (0 = 10 OR a.branch = 10))

字符串
但是,0 = 250 = 10永远不会为真,因此您可以将其简化为:

WHERE (   parameter = 25
      AND dep1.code = 25)
OR    (   (parameter != 25 OR parameter IS NULL)
      AND a.branch = 10)


对于整个WHERE子句,它将是:

WHERE ta.year = 2023
AND   (  (   parameter = 25
         AND (0 = 25 OR dep1.code = 25))
      OR (   (parameter != 25 OR parameter IS NULL)
         AND (0 = 10 OR a.branch = 10))
      )
AND   (0=0 OR d.code = 0)
AND   (0=0 OR sg.group_code = 0)
AND   (0=0 OR sf.code = 0)


可以简化为:

WHERE ta.year = 2023
AND   (  (   parameter = 25
         AND dep1.code = 25)
      OR (   (parameter != 25 OR parameter IS NULL)
         AND a.branch = 10)
      )

相关问题