Select a specific column based on another column&#

2019-03-24 11:26发布

问题:

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?

回答1:

SELECT CASE
          WHEN Type = 0 THEN Val0
          WHEN Type = 1 Then Val1
          .
          .
          WHEN Type = N Then ValN
       END 
  FROM tbl


回答2:

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.



回答3:

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).



回答4:

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