我想在一个或两个字段上有条件地连接到一个表,具体取决于特定列的值。我尝试使用 CASE 语句来完成此操作,但它不起作用:
SELECT *
FROM TEST_TABLE1 A
INNER JOIN ALT_TABLE B ON B.UNIT = A.UNIT AND B.USERID = A.USERID
INNER JOIN OTHER_TABLE 2 ON CASE WHEN F.DEPARTMENT <> 'All'
THEN 'F.UNIT = A.UNIT AND F.DEPARTMENT = B.DEPARTMENT'
ELSE 'F.UNIT = A.UNIT'
END
但是我收到一个错误:在预期条件的上下文中指定的非布尔类型的表达式,靠近“INNER”。
是否有另一种方法可以根据列值更改连接条件?
答案 0 :(得分:1)
你需要这个:
cum_series_b
您不能像不使用动态 SQL 那样“动态编码”查询(这里是个坏主意)。
另外,如果你分析你的逻辑,你会看到...
INNER JOIN OTHER_TABLE 2 ON F.UNIT = A.UNIT AND
(F.DEPARTMENT = 'All' OR F.DEPARTMENT = B.DEPARTMENT)
总是被加入,而UNIT
只需要在DEPARTMENT
时加入,换句话说:要么是<> 'All'
或者我们需要连接条件。