#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть список разновидностей, каждая разновидность имеет подобные коды
CLADIR(E611, E613, E614, E615, F120, F121, F122, F123, F188, F1D9, F1DA, F108)
VITIN(E620, F10A, F10E, F16B, F16C, F16D, F16E, F17D)
SOLO(E612, E617, E618, E619, F124, F125, F126, F127, F128, F1DB, F1DC)
JIMNA(E61E, F180)
У меня есть данные в существующей базе данных с разными именами и кодами разнообразия (некоторые коды равны одному из этих кодов из этих вариантов, а некоторые нет). Я работаю над обновлением названия разновидности на основе соответствия его кода любому из этих кодов. Если код не является частью какого-либо из этих кодов, то я хочу удалить эту строку.
Пример данных:
Variety Code
SNANA F108
FLATO E612
JAITI X111
для вышеуказанных данных
- SNANA будет обновлен как CLADIR, поскольку код F108 является одним из кодов CLADIR из списка
- FLATO будет обновляться как СОЛО, так как код E612 является одним из кодов СОЛО из списка
- JAITI с кодом X111 строка должна быть удалена, поскольку X111 не соответствует ни одному из приведенных выше кодов разновидностей Возможно ли это сделать в обычном sql? кто-нибудь может мне помочь
Ответ №1:
Вы ищете case
выражения?
update t
set variety = (case when code in ('E611', . . . ) then 'Cladir'
when code in ('E620', . . . ) then 'Vitin'
. . .
end);
-- The above sets the variety for non-matching codes to `NULL`, so delete those
delete from t
where variety is null;
Комментарии:
1. Я думаю, что это работает. Мне нужно выполнить этот запрос только для нескольких значений, поэтому я включу подсказку where с
where variety in ('SNANA','FLATO','JAITI')