views:

49

answers:

4

I have a table like this

ID | Type | Val0 | Val1
1  |  0   |  A   | NULL
2  |  1   | NULL |  B

I need to select Val0 when the type is 0, and Val1 when the type is 1, and ValN when type is N...

How can I do that?

+4  A: 
SELECT CASE
          WHEN Type = 0 THEN Val0
          WHEN Type = 1 Then Val1
          .
          .
          WHEN Type = N Then ValN
       END 
  FROM tbl
dcp
+2  A: 

The way I read this, you need to use UNION:

SELECT a.val0
  FROM TABLE a
 WHERE a.type = 0
UNION ALL
SELECT a.val1
  FROM TABLE a
 WHERE a.type = 1
UNION ALL ...

UNION ALL doesn't remove duplicates, and is faster than UNION (because it removes duplicates).

Doing this dynamically is possible.

OMG Ponies
I interpreted it to be "give me a single value back based on the given type". But you may be totally right. It was good to ask for an expected output :).
dcp
OMG Ponies
+1  A: 

See CASE statement http://msdn.microsoft.com/en-us/library/ms181765.aspx

Mchl
+1  A: 

For low values of N, you can do it ad-hoc using the CASE statement, like CASE Type WHEN 0 THEN Val0 WHEN 1 THEN Val1 END. If your N is bigger, you should probably normalize your database (i.e. put ID => ValN mappings in a different table).

cypheon