Ask the Expert

How to return multiple values for THEN clause in an SQL CASE expression

I want to return multiple values in the THEN clause of a SQL CASE expression.

SELECT c.company_code, c.com_inactive_flag, e.emp_no 
FROM company c, employees e 
WHERE c.com_code = e.com_code 
AND e.emp_status in ( 
CASE c.com_inactive_flag 
WHEN 'N' THEN 'A'
WHEN 'Y' THEN 'B,C' END )

If the flag is N, all those employees will be retrieved who have status A; otherwise all those who have B and C flag should be retrieved. But because I have 'B,C' it will not return anything. Is there any way I can put 'B,C' etc. instead of just one value like 'B'?

    Requires Free Membership to View

Yes, there is a way. In this case, it's probably easier just to use Boolean logic. Combine ANDs and ORs with the right level of parentheses nesting, and you can do pretty much anything in SQL.

SELECT c.company_code
     , c.com_inactive_flag
     , e.emp_no 
  FROM company c
INNER
  JOIN employees e 
    ON e.com_code = c.com_code 
   AND (
         ( c.com_inactive_flag = 'N' 
       AND e.emp_status = 'A'
         )
      OR ( c.com_inactive_flag = 'Y' 
       AND e.emp_status IN ('B','C')
         )
       )

Note "Boolean logic" is named after George Boole, inventor of the word AND

This was first published in November 2008

Join the conversationComment

Share
Comments

    Results

    Contribute to the conversation

    All fields are required. Comments will appear at the bottom of the article.