是的,你可以用这样的案例语句重写它
SELECT Column1,
CASE WHEN Column2 IS NOT NULL AND Column3='Value' THEN 'Testing #1'
WHEN Column3 IS NULL AND Column2='Test Value' THEN 'Testing #2'
ELSE 'Testing #3' END as customcol
FROM MyTable
编辑:好的,我正在进行此编辑,因为根据您的评论,我们需要解决两个问题。(我将保留原始答案,以防万一它可能对某人有所帮助。)
1)结果集应该被过滤,应该没有else
部分。
这实际上可以通过此解决方案实现,因为else
它是可选的,并且可以在最后使用 where 子句过滤数据。
Testing #
2)如果符合条件,则能够多次选择具有不同值的同一行。
然而,这是我以前的解决方案无法实现的。所以我想到了一个不同的。希望它适合你的情况。这里是
Testing #
S1 - 使用值(Testing #1
、、Testing #2
等)创建一个新表Testing #3
。假设这张表名为Testing
.
S2 - 将您的主表 ( MyTable
) 与Testing
包含Testing #
值的表连接起来。因此,现在您拥有真实数据和测试值的所有可能组合。
S3 - 使用 where 子句过滤您不想出现的结果。
S4 - 过滤真实数据 <-> 测试组合并添加 where 子句。
结束查询应如下所示:
SELECT M.Column1, T.TestingValue
FROM MyTable M
INNER JOIN Testing T ON 1=1
WHERE
(
(M.Column2 IS NOT NULL AND M.Column3='Value' AND T.TestingValue='Testing #1') OR
(M.Column3 IS NULL AND M.Column2='Test Value' AND T.TestingValue='Testing #2') OR
<conditions for other testing values>
)
AND
<other conditions>
我认为这应该有效并产生您想要的结果。但由于我没有数据,我无法运行任何基准测试与基于联合的解决方案。所以我没有任何科学证据表明这更快,但这是一种选择。您可以测试两者并使用更好的。
可能有点晚了,但希望这能解决您的问题。