Search code examples
sqlwhere-clausecase-when

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 '='"


Solution

  • 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.