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

There are Comments. Add yours.

 
TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to: