基于列值的条件连接列

Conditional join columns based on column value

我想在一个或两个字段上有条件地加入 table,具体取决于特定列的估值方式。我尝试使用 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' 附近的预期条件的上下文中指定的非布尔类型的表达式。

是否有另一种方法可以根据列值更改连接条件?

你需要这个:

...
INNER JOIN OTHER_TABLE 2 ON F.UNIT = A.UNIT AND
     (F.DEPARTMENT = 'All' OR F.DEPARTMENT = B.DEPARTMENT)

您不能像不使用动态 SQL 那样“动态编码”查询(这里是个坏主意)。

另外,如果你分析一下你的逻辑,你会发现UNIT总是加入,而DEPARTMENT只需要在<> 'All'时加入,换句话说:要么它是 = 'ALL' 或者我们需要连接条件。