2017-10-16 4 views
0

에 따라 가입 I이 조인 내가 계정으로 사건을 맡아하고 싶은 곳 'LASTAvenant.CodeAvenant'= 0 :이 LASTAvenant의 값을 비교하는 조인을 사용하고다르게 조건

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

및 BeforeLastAvenant 따라서 '> 0'조건이 의미가 있습니다 (-1을 피함).

이 코드를 사용하면 'CodeAvenant'= 0에 도달 할 수 없지만 이전 버전의 History 테이블과 비교하고 싶습니다. '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에는 다른 열보다 하나의 열이 더 있습니다. 직접 결합 할 수는 없지만 모든 열을 선택하십시오. 따라서 솔루션이 제대로 작동해야합니다. –

+0

내 즐거움 Benoit .. 해피 코딩 - :) .. –

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;