我有这样选择基于另一列的值的特定列
ID | Type | Val0 | Val1
1 | 0 | A | NULL
2 | 1 | NULL | B
我需要选择Val0
当类型为0,并且Val1
当类型是1,并且ValN
表时类型是N ...
我该怎么做?
我有这样选择基于另一列的值的特定列
ID | Type | Val0 | Val1
1 | 0 | A | NULL
2 | 1 | NULL | B
我需要选择Val0
当类型为0,并且Val1
当类型是1,并且ValN
表时类型是N ...
我该怎么做?
SELECT CASE
WHEN Type = 0 THEN Val0
WHEN Type = 1 Then Val1
.
.
WHEN Type = N Then ValN
END
FROM tbl
这显然确实有一个问题,但如果你使用另一个数据库的表,因为显然Sql Server然后施加最大数量为10的情况...这非常小。 – eidylon 2011-11-09 16:46:40
我看这个问题的方法,你需要使用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快(因为它消除重复)。
动态地做到这一点是可能的。
我将它解释为“根据给定的类型给我一个单一的值”。但你可能是完全正确的。这是很好的要求一个预期的输出:)。 – dcp 2010-07-26 20:30:50
@dcp:我一直被我的错误假设咬了太多次 - 我在等待,看看它是否对其他人有意义 – 2010-07-26 20:32:51
如果N值低,则可以使用CASE statement,像CASE Type WHEN 0 THEN Val0 WHEN 1 THEN Val1 END
做即席。如果你的N更大,你应该规范你的数据库(即把ID => ValN映射到不同的表中)。
CASE声明效果很好。规范化建议是好的,但并不总是可行的,当你与别人数据库进行集成时。不幸。 – eidylon 2011-11-09 16:45:16
您能否提供预期产出的样本? – 2010-07-26 20:27:43
'SELECT ... WHERE ID = 1 - A' – BrunoLM 2010-07-26 20:29:07
只是一个快速评论:如果你有这样的表格,你应该考虑一个不同的模式。你的数据库几乎肯定不会遵循实体关系模型。 – Borealid 2010-07-26 20:30:18