Select a specific column based on another column's value
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 th开发者_StackOverflow社区e 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
精彩评论