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
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.
See CASE statement http://msdn.microsoft.com/en-us/library/ms181765.aspx
SELECT CASE
WHEN Type = 0 THEN Val0
WHEN Type = 1 Then Val1
.
.
WHEN Type = N Then ValN
END
FROM tbl
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).