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