2017-10-16 77 views
0

我有參加,我想考慮的情況下「LASTAvenant.CodeAvenant」 = 0:加入不同,這取決於條件

FROM Avenant BeforeLastAvenant 
JOIN Avenant LASTAvenant ON LASTAvenant.CodeContrat = 
BeforeLastAvenant.CodeContrat AND LASTAvenant.CodeAvenant > 0 
          AND LASTAvenant.CodeAvenant - 1 = BeforeLast.CodeAvenant 

我使用這個連接的值LASTAvenant比較和BeforeLastAvenant如此條件「> 0」有意義(避免-1之後)。

有鑑於此,我將無法達到「CodeAvenant」 = 0,但我想它從歷史記錄表中的前一版本的本身進行比較。 根據「CodeAvenant」我想加入歷史上的表或表LASTAvenant。

我想這樣做:

JOIN Avenant LASTAvenant ON LASTAvenant.CodeContrat = 
BeforeLastAvenant.CodeContrat AND IF LASTAvenant.CodeAvenant = 0 
            THEN (--here comes the tricky part I want to replace the 
--table 
            'BeforeLastAvenant.CodeAvenant = HistorytableAvenant.CodeAvenant' 
             ) 
          ELSE LASTAvenant.CodeAvenant = BeforeLastAvenant.CodeAvenant  

我試圖儘可能清晰。

回答

2

如果我理解你的情況正確的,這是你想要的。嘗試用這種

JOIN Avenant LASTAvenant ON LASTAvenant.CodeContrat = BeforeLastAvenant.CodeContrat 
and BeforeLastAvenant.CodeAvenant = HistorytableAvenant.CodeAvenant 
where LASTAvenant.CodeAvenant = 0 

union all 

JOIN Avenant LASTAvenant ON LASTAvenant.CodeContrat = BeforeLastAvenant.CodeContrat 
and LASTAvenant.CodeAvenant - 1 = BeforeLastAvenant.CodeAvenant 
where LASTAvenant.CodeAvenant <> 0 
+0

感謝那些爲我想,因爲我已經張貼。但不幸的是,我的sql請求更復雜,我認爲我可以使它更簡單。其實我HistoryTable有一列比別人我不能直接加入,但選擇所有ecxept一個列多。所以你的解決方案應該可行 –

+0

我很高興伯努瓦..快樂編碼 - :) .. –

1

一種解決方案:用UNION ALL你可以CodeAvenant = 0CodeAvenant = -1記錄添加的歷史記錄:

FROM Avenant LASTAvenant 
JOIN 
(
    SELECT CodeContrat, CodeAvenant, <other columns> 
    FROM Avenant 
    UNION ALL 
    SELECT CodeContrat, -1 AS CodeAvenant, <other columns> 
    FROM HistorytableAvenant 
    WHERE CodeAvenant = 0 
) BeforeLastAvenant ON BeforeLastAvenant.CodeContrat = LASTAvenant.CodeContrat 
        AND BeforeLastAvenant.CodeAvenant = LASTAvenant.CodeAvenant - 1;