有条件地使用if else加入oracle sql

时间:2017-08-13 19:56:09

标签: sql oracle

如何在oracle sql中执行此操作我尝试了不同的方法。在这里,我提供if else查询以了解我需要执行的操作

if(SELECT SLS_CONT_NO FROM GL WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714') is not null
then
SELECT DISTINCT M.NAME FROM GL 
JOIN SALES_CONT SLS ON GL.SLS_CONT_NO = SLS.SLS_CONT_NO   
JOIN MARKETER M ON M.MKTRINIT = SLS.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714';
ELSE
SELECT DISTINCT M.NAME FROM GL 
JOIN TANK TA ON GL.DEST_TANK=TA.TANK_NO  
JOIN MARKETER M ON M.MKTRINIT = TA.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714';
end if

2 个答案:

答案 0 :(得分:1)

您可以使用CASE WHEN Statement

SELECT CASE WHEN a.SLS_CONT_NO IS NOT NULL 
            THEN (SELECT DISTINCT M.NAME
                    FROM GL b
                    JOIN SALES_CONT SLS
                      ON b.SLS_CONT_NO = SLS.SLS_CONT_NO   
                    JOIN MARKETER M
                      ON M.MKTRINIT = SLS.MKTRINIT
                   WHERE b.INVNO = '67883' AND b.CUST_ID = '14714')
            ELSE (SELECT DISTINCT M.NAME
                    FROM GL c
                    JOIN TANK TA
                      ON c.DEST_TANK = TA.TANK_NO  
                    JOIN MARKETER M
                      ON M.MKTRINIT = TA.MKTRINIT
                   WHERE c.INVNO = '67883' AND c.CUST_ID = '14714')
             END AS NAME
 FROM GL a
WHERE a.INVNO = '67883'
  AND a.CUST_ID = '14714';

答案 1 :(得分:1)

使用UNION子句考虑EXISTS/NOT EXISTS查询,其中至少有一个SELECT语句将返回:

SELECT M.NAME FROM GL 
JOIN SALES_CONT SLS ON GL.SLS_CONT_NO = SLS.SLS_CONT_NO   
JOIN MARKETER M ON M.MKTRINIT = SLS.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714'
  AND EXISTS (SELECT SLS_CONT_NO FROM GL 
              WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714')

UNION

SELECT M.NAME FROM GL 
JOIN TANK TA ON GL.DEST_TANK = TA.TANK_NO  
JOIN MARKETER M ON M.MKTRINIT = TA.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714'
  AND NOT EXISTS (SELECT SLS_CONT_NO FROM GL 
                  WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714')