2013-11-20 52 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,我不能從您的數據中做出決定。