Как обновить столбец 2 на основе столбца 1, а затем столбец 3 на основе столбца 2 - PullRequest
0 голосов
/ 12 марта 2020

Я работаю с существующей таблицей с отсутствующими или неверными данными в столбцах 2 и 3, поэтому мне нужно обновить эти столбцы на основе столбца 1, а затем столбца 2 после его обновления.

Столбец 1 автомобиль "класс" (большой автомобиль, маленький внедорожник 2wd, пикап 4wd и др. c). Столбец 2 должен быть «type_id» (номер 1-6) в зависимости от класса транспортного средства в столбце 1. А затем в столбце 3 указывается «тип» транспортного средства (седан, пикап и т. Д. c) на основе идентификатора типа в столбце 2. .

для обновления второго столбца "type_id" Я пробовал несколько вариантов:

UPDATE mytable
SET type_id = CASE 
WHEN "class" = 'Compact Cars' then '1' ELSE type_id
WHEN "class" = 'Midsize Station Wagons' then '3' ELSE type_id
WHEN "class" = 'Minivan - 2WD' then '2' ELSE type_id
WHEN "class" = 'Minivan - 4WD' then '2' ELSE type_id

И т. Д.

В переменной содержится около 30 различных переменных. столбец 1, который должен соответствовать идентификационному номеру в столбце 2. Оттуда мне нужно обновить 3-й столбец с базовым c типом транспортного средства, который соответствует номеру в столбце 2.

Любая помощь приветствуется .

1 Ответ

0 голосов
/ 12 марта 2020

Я не совсем понимаю смысл итеративной логики c здесь: насколько я понимаю ваш вопрос, вы можете связать идентификатор типа и тип с каждым классом.

Может появиться табличное значение здесь удобно:

update mytable t
set type_id = x.type_id, type = x.type
from (
    values 
        ('Compact Cars', 1, 'sedan'),
        ('Midsize Station Wagons', 3, 'foo'),
        ('Minivan - 2WD', 2, 'pickup'),
        ('Minivan - 4WD', 2, 'pickup'),
)  x(class, type_id, type)
where x.class = t.class

Если вам нужно выполнить большое количество транскодификаций, было бы проще сохранить их все в таблице, которую вы могли бы напрямую объединить в своем запросе.

...