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