如果值与查找表中的值匹配,我想在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))
。所以,如果匹配,我希望select返回@Mappings ParentModule,否则返回AOSCode_AOSPeriod连接返回的值
SELECT用于INSERT INTO语句......
答案 0 :(得分: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
。