2013-11-20 3 views
0

값이 조회 테이블의 값과 일치하면 SELECT 문에서 값을 바꿔야합니다. 이는 자식에서 부모로의 매핑을 처리하기위한 것입니다.조건부로 매핑 테이블에서 선택 값 바꾸기

DECLARE @Mappings TABLE 
(
    IdKey INT IDENTITY PRIMARY KEY , 
    ParentModule NVARCHAR(255) , 
    ChildModule NVARCHAR(255) 
) 

하위 모듈과 상위 모듈로 채워지기 때문에 약 200 개의 매핑이 있습니다.

그런 다음 내 SELECT 문에서 자식 대신 ParentModule을 사용하려고하지만 자식이 일치하지 않으면 선택한 모든 값을 사용합니다.

SELECT DISTINCT 
     RTRIM(StudentId) , 
     ISNULL((RTRIM(AOSCode) + '_' + RTRIM(AOSPeriod)), '') AS Module 
FROM Curriculum 

내가 ChildModule에 비교할 값은 (RTRIM(AOSCode) + '_' + RTRIM(AOSPeriod))입니다. 그 일치 그래서 만약 그렇지 않으면 AOSCode_AOSPeriod

의 연결

선택은 INSERT INTO 문에 사용되는 ...

답변

1

에 의해 반환 된 값이 시도는 @Mappings ParentModule를 반환 할 선택합니다 :

SELECT DISTINCT 
     RTRIM(StudentId) , 
     ISNULL(Map.ParentModule,ISNULL((RTRIM(AOSCode) + '_' + RTRIM(AOSPeriod)), '')) AS Module 
FROM 
    Curriculum AS Cr 
    LEFT JOIN @Mappings AS Map ON 
     ((RTRIM(Cr.AOSCode) + '_' + RTRIM(Cr.AOSPeriod)) = Map.ChildModule; 

ChildModule으로 표현식 RTRIM(AOSCode) + '_' + RTRIM(AOSPeriod)에 참여하게됩니다. 일치하는 항목이 있으면 ParentModule이 표시됩니다. 그렇지 않으면 ISNULL((RTRIM(AOSCode) + '_' + RTRIM(AOSPeriod)), '')이 표시됩니다.

ISNULL이 조인의 표현식에 사용되어야한다면 귀하의 데이터를 결정할 수 없습니다.