2013-11-20 133 views
0

如果值与查找表中的值匹配,我想替换SELECT语句中的值。这是处理从孩子到父母的映射。有条件地替换映射表中的选择值

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

这是填充子模块及其父模块,将有大约200这种映射。

然后在我的SELECT语句中,我想使用ParentModule而不是Child,但是如果孩子不匹配,那么使用任何将被选中的值。

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

我要比较ChildModule值为(RTRIM(AOSCode) + '_' + RTRIM(AOSPeriod))。所以,如果匹配我想选择返回@Mappings ParentModule,否则AOSCode_AOSPeriod

的串联

的SELECT是在INSERT INTO语句中使用...

回答

1

返回的值试试这个:

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; 

您将加入表达式RTRIM(AOSCode) + '_' + RTRIM(AOSPeriod)ChildModule。如果有匹配,您将显示ParentModule。否则,您将显示ISNULL((RTRIM(AOSCode) + '_' + RTRIM(AOSPeriod)), '')

请注意,如果ISNULL必须在连接的表达式中使用ISNULL,我不能从您的数据中做出决定。