基于列值的条件连接列

时间:2021-01-18 21:08:13

标签: sql-server-2014

我想在一个或两个字段上有条件地连接到一个表,具体取决于特定列的值。我尝试使用 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”。

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

1 个答案:

答案 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' 或者我们需要连接条件。