我有一张这样的表
ID | Type | Val0 | Val1
1 | 0 | A | NULL
2 | 1 | NULL | B
我需要在类型为0时选择Val0
,在类型为1时选择Val1
,在类型为N时选择ValN
...
我该怎么做?
答案 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)