简体   繁体   中英

SQL query case when then in where clause

I read a lot of similar questions but didn't find a solution for me. Basically I would like to have a where clause ( AND PEKP.VORGANGS_ART = 'BE' ) only if a special condition ( PFSP.EINKAUFS_KZ = 2 ) is true.

I tried in many ways like that:

SELECT *
FROM PFSP 
LEFT OUTER JOIN PFAK on PFSP.RUECKMELDE_NR = PFAK.RUECKMELDE_NR 
LEFT OUTER JOIN PEKP ON (PFSP.BESTELL_NR=PEKP.VORGANGS_NR) 
                     AND (PFSP.BESTELL_POS_NR=PEKP.VORGANGS_POS_NR) 
LEFT OUTER JOIN PMLB ON PFSP.KOMPONENTEN_ARTIKEL_NR=PMLB.ARTIKEL_NR 
WHERE PFAK.KD_VORGANGS_NR = '910-001213' 
  AND PFSP.RUECKMELDE_STATUS = '3' 
  AND PFSP.BESCHAFFUNGSKENNER = 'F' 
  AND CASE PFSP.EINKAUFS_KZ 
         WHEN 2 THEN PEKP.VORGANGS_ART = 'BE'
       END

but I keep getting errors:

wrong syntax near '='"

Skip the CASE , use AND / OR instead:

AND (PFSP.EINKAUFS_KZ <> 2 OR PEKP.VORGANGS_ART = 'BE')

If PFSP.EINKAUFS_KZ = 2, then PEKP.VORGANGS_ART must be equal to 'BE'.

If PFSP.EINKAUFS_KZ <> 2, it doesn't matter what PEKP.VORGANGS_ART is.

You probably want something like:

AND (
      (PFSP.EINKAUFS_KZ = 2 AND PEKP.VORGANGS_ART='BE') 
      OR PFSP.EINKAUFS_KZ <> 2 --You may need to catch NULL as well
    )

With this CASE expression:

AND 1 = CASE  
  WHEN PFSP.EINKAUFS_KZ = 2 AND PEKP.VORGANGS_ART = 'BE' THEN 1 
  WHEN PFSP.EINKAUFS_KZ = 2 THEN 0
  ELSE 1
END

The order of the conditions is important.

SELECT *
FROM PFSP 
LEFT OUTER JOIN PFAK on PFSP.RUECKMELDE_NR = PFAK.RUECKMELDE_NR 
LEFT OUTER JOIN PEKP ON (PFSP.BESTELL_NR=PEKP.VORGANGS_NR) 
                     AND (PFSP.BESTELL_POS_NR=PEKP.VORGANGS_POS_NR) 
LEFT OUTER JOIN PMLB ON PFSP.KOMPONENTEN_ARTIKEL_NR=PMLB.ARTIKEL_NR 
WHERE PFAK.KD_VORGANGS_NR = '910-001213' 
  AND PFSP.RUECKMELDE_STATUS = '3' 
  AND PFSP.BESCHAFFUNGSKENNER = 'F' 
  AND ((PFSP.EINKAUFS_KZ = 2 AND PEKP.VORGANGS_ART = 'BE') OR (PFSP.EINKAUFS_KZ <> 2)   )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM