根据 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))
我有一个查询,我希望根据列中的值使用不同的条件。
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))