基于列值的条件连接列
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'
或者我们需要连接条件。
我想在一个或两个字段上有条件地加入 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'
或者我们需要连接条件。