首页 > 解决方案 > 带有两个函数的条件内连接

问题描述

我有两个功能。我需要根据 BIT 值来决定是否加入这两个。

ON APEL.data_Period_dataination_Lookup_ID = CCEL.data_Period_dataination_Lookup_ID
INNER JOIN  markcommon.GetPredecessordatadataIds() AS PIDS
IF @Combined_Flag=1 
BEGIN
ON PIDS.data_Period_dataination_Identifier = APEL.data_Period_dataination_Identifier
AND PIDS.data_Period_Identifier = APL.data_Period_Identifier
END

基本上

if BIT=0 join with function 1 else join with function 2

我尝试放置一个 IF 子句 .. 但它似乎不起作用。正确的方法是什么?

标签: sqlsql-servertsqljoin

解决方案


只需将您的静态条件添加为连接条件的一部分并使用 aLEFT JOIN来确保它适用于缺少的行。case然后,您可以在选择中使用表达式来获取正确的列,例如

SELECT

    CASE WHEN F1.id IS NOT NULL THEN F1.MyColumn ELSE F2.MyColumn END

FROM ...

LEFT JOIN markcommon.Function1() AS F1
  ON @Combined_Cohort = 1
  AND {The rest of the join conditions}

LEFT JOIN markcommon.Function2() AS F2
  ON @Combined_Cohort = 0
  AND {The rest of the join conditions}

推荐阅读