根据 switch case 可能的列值使用不同的条件

using different condition based on column value possible by switch case

我有一个查询,我希望根据列中的值使用不同的条件。

SELECT *
FROM com140 cm
WHERE cm.csnstar IN (90)

但问题来了,因为我希望它发生。

cm.csnrsncde IN (135,177) 我希望这个条件执行时

AND cm.duedate > (SELECT MAX(e.dte1) 
                         FROM events e 
                         WHERE e.ispec   ='FI560'
                         AND   e.inrtyp  ='RVP'
                         AND   e.trntyp1 = 'RP'
                         AND   e.staevt  = 55 
                         AND   e.dte2  > DATE_1)

但是当cm.csnrsncde IN (91,98,172)我只想执行下面的条件而不是前一个。

AND cm.duedate> DATE1

请帮助我。 谢谢.

试试这个 Where 子句

SELECT *
FROM   com140 cm
WHERE  cm.csnstar = 90
        OR ( cm.csnrsncde IN ( 135, 177 )
             AND cm.duedate > (SELECT Max(e.dte1)
                               FROM   events e
                               WHERE  e.ispec = 'FI560'
                                      AND e.inrtyp = 'RVP'
                                      AND e.trntyp1 = 'RP'
                                      AND e.staevt = 55
                                      AND e.dte2 > DATE_1) )
        OR ( cm.csnrsncde IN ( 91, 98, 172 )
             AND cm.duedate > DATE1 ) 

这样可以吗?

SELECT *
FROM   com140 cm
WHERE  cm.csnstar = 90
AND   ((cm.csnrsncde IN ( 135, 177 )
        AND cm.duedate > (SELECT Max(e.dte1)
                           FROM   events e
                           WHERE  e.ispec = 'FI560'
                           AND e.inrtyp = 'RVP'
                           AND e.trntyp1 = 'RP'
                           AND e.staevt = 55
                           AND e.dte2 > DATE_1) )
        OR (cm.csnrsncde IN (91,98,172)
             AND cm.duedate > DATE1))

您添加的代码应该可以工作

SELECT *
FROM   com140 cm
WHERE  cm.csnstar = 90
AND   ((cm.csnrsncde IN ( 135, 177 )
    AND cm.duedate > (SELECT Max(e.dte1)
                       FROM   events e
                       WHERE  e.ispec = 'FI560'
                       AND e.inrtyp = 'RVP'
                       AND e.trntyp1 = 'RP'
                       AND e.staevt = 55
                       AND e.dte2 > DATE_1) )
    OR (cm.csnrsncde IN (91,98,172)
         AND cm.duedate > DATE1))