[英]Conditional Inner Join with two Functions
我有兩個功能。 我需要根據 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
基本上
如果 BIT=0 加入 function 1 否則加入 function 2
我嘗試放置一個 IF 子句.. 但它似乎不起作用。 正確的方法是什么?
只需將您的 static 條件添加為連接條件的一部分,並使用LEFT JOIN
來確保它適用於缺失的行。 然后,您可以在 select 中使用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}
我認為您可以只使用LEFT JOIN
:
ON APEL.data_Period_dataination_Lookup_ID = CCEL.data_Period_dataination_Lookup_ID LEFT JOIN
markcommon.GetPredecessordatadataIds() PIDS
ON @Combined_Cohort = 1 AND
PIDS.data_Period_dataination_Identifier = APEL.data_Period_dataination_Identifier AND
PIDS.data_Period_Identifier = APL.data_Period_Identifier
. . .
WHERE @Combined_Cohort <> 1 OR PIDS.data_Period_dataination_Identifier IS NOT NULL
您可以按如下方式使用LEFT JOIN
:
APEL.data_Period_dataination_Lookup_ID = CCEL.data_Period_dataination_Lookup_ID
LEFT JOIN markcommon.GetPredecessordatadataIds() AS PIDS
ON (@Combined_Flag=1 AND PIDS.data_Period_dataination_Identifier = APEL.data_Period_dataination_Identifier
AND PIDS.data_Period_Identifier = APL.data_Period_Identifier
)
LEFT JOIN FUNCTION2() AS PIDS2
ON (@Combined_Flag=0 AND <<join condition for function 2>>
)
另請檢查:
SELECT
IIF(F1.id IS NOT NULL,F1.MyColumn,F2.MyColumn)
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 != 1
AND {The rest of the join conditions}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.