根据其他列的值选择特定列

时间:2010-07-26 20:26:03

标签: sql sql-server tsql

我有一张这样的表

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

我需要在类型为0时选择Val0,在类型为1时选择Val1,在类型为N时选择ValN ...

我该怎么做?

4 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:3)

我读这篇文章的方式,你需要使用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不会删除重复项,并且比UNION更快(因为它会删除重复项)。

可以动态地执行此操作。

答案 2 :(得分:2)

对于较低的N值,您可以使用CASE statement临时执行此操作,例如CASE Type WHEN 0 THEN Val0 WHEN 1 THEN Val1 END。如果您的N更大,您应该规范化您的数据库(即将ID => ValN映射放在另一个表中)。

答案 3 :(得分:1)