Tsql 有条件地替换映射表中的select值

Tsql 有条件地替换映射表中的select值,tsql,Tsql,如果值与查找表中的值匹配,我想替换SELECT语句中的值。这是为了处理从子对象到父对象的映射 DECLARE @Mappings TABLE ( IdKey INT IDENTITY PRIMARY KEY , ParentModule NVARCHAR(255) , ChildModule NVARCHAR(255) ) 这是由子模块及其父模块填充的,大约有200个这样的映射 然后在我的SELECT语句中,我想使用ParentModule而不是子模块,但如果子模

如果值与查找表中的值匹配,我想替换
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))
。因此,如果匹配,我希望select返回@Mappings ParentModule,否则返回由AOSCode_AOSPeriod串联返回的值

SELECT用于INSERT INTO语句…

请尝试以下操作:

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