Полагаю, вы просто хотите получить набор результатов. Вот идея:
- Выберите существующие строки, которые вы хотите.
- Добавить в каждую переменную как отдельный подзапрос.
Результирующий запрос выглядит так:
select ID, ID2, VARIABLE, VA_VAL
from t
where not ((ID2 = 102 and VARIABLE = 'QUAL' and VA_VAL = '02') or
(ID2 = 103 and VARIABLE = 'CODE')
)
union all
select t.id, 104 as id2, 'NEW_CD1',
max(case when ID2 = 103 and VARIABLE = 'CODE' then VA_VAL end)
from t
group by t.id
having max(case when ID2 = 103 and VARIABLE = 'CODE' then VA_VAL end) is not null
union all
select t.id, 104 as id2, 'NEW_CD1',
max(case when ID2 = 102 and VARIABLE = 'QUAL' then VA_VAL end
from t
group by t.id
having max(case when ID2 = 102 and VARIABLE = 'QUAL' then VA_VAL end) is not null;
Если вы хотите заменить существующую таблицу - и есть много изменений (которые я предполагаю, что это правда) - запустите этот запрос и сохраните результаты в таблице.
Затем обрежьте существующую таблицу и заново вставьте в нее значения.