2013-11-20 3 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.

Смежные вопросы