簡體   English   中英

帶有兩個函數的條件內連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM