【发布时间】:2016-01-11 07:24:58
【问题描述】:
希望这是一个快速的
SELECT *
FROM T
left JOIN J ON
CASE
WHEN condition1 THEN 1 --prefer this option even if CASE2 has a value
WHEN condition2 THEN 2
ELSE 0
END = 1 (edit: but if 1 does not satisfy, then join on 2)
两种情况都返回结果,但我希望 THEN 1 取代 THEN 2 并成为查找优先级
我可以让 SQL 执行诸如加入 max(CASE) 之类的操作吗?
基本上我试图从 Excel 复制嵌套的 INDEX/MATCH
编辑:我听到的是,案例应该在第一个返回的 TRUE 处停止,但是当我测试时它的行为不是那样
SELECT *
FROM T
left JOIN J ON
CASE
WHEN condition1 THEN 1 --prefer this option even if CASE2 has a value
WHEN condition2 THEN 1
ELSE 0
END = 1
它似乎有时更喜欢 2nd THEN 1,但并非总是如此……有什么我遗漏的东西会导致这种行为吗?
【问题讨论】:
-
案例表达式,而不是案例陈述......
-
将使用第一个真正的条件。
-
我认为第一个 TRUE 也会被使用,但是当我测试它时,情况并非如此。 (当我测试它时,两者都是 THEN 1)我为这个例子添加了 THEN 2
-
该语句不会捕获 col2 匹配而 col1 不匹配的情况。请添加数据示例以及预期的结果集。
-
也许您的联接只需要使用
OR,但您输出的列描述了按优先级应用的匹配项。
标签: sql sql-server tsql join case