Обновите столбец в таблице A на основе значений в таблице B с помощью оператора CASE - PullRequest
0 голосов
/ 23 октября 2019

У меня сложный вопрос.

У меня будет таблица A, которая состоит из двух столбцов A.ID и A.Cat1_Avail. Колонка Cat1_Avail на данный момент пуста.

Я хотел бы обновить значения в A.Cat1Avail на основе логического вопроса. В частности, у меня есть еще одна таблица B, которая состоит из B.ID и B.Feature. B.Feature может содержать следующие значения: Cat1, Cat2 или NULL.

Для сопоставления идентификаторов, я хотел бы вставить 1 в A.Cat1_Avail с учетом записи в таблице B содержит значение Cat1 в B.Feature. В случае Cat2, A.Cat1_Avail должно быть 0.

Таким образом, я хотел бы обновить столбец на основе логических вопросов (совпадает ли идентификатор? Каково содержание B.Feature?).

Надеюсь, это прояснит ситуацию и не будет слишком конкретным.

Полагаю, эту проблему можно решить несколькими последовательными командами. Но я хотел бы иметь одну команду, которая может решить эту проблему.

Ответы [ 3 ]

0 голосов
/ 23 октября 2019

Обновление выписки!

UPDATE testa set testa.lvalue = (case when testb.lvalue = 'cat1' then 1 
                                        when testb.lvalue = 'cat2' then 0
                                        else null end)
    FROM testa join testb on (testa.id = testb.id)
0 голосов
/ 23 октября 2019

Пожалуйста, попробуйте

Update a
set 
a.Cat1Avail = (case WHEN b.Feature = 'cat1' THEN 1
                    WHEN b.Feature ='cat2' THEN 0
                    ELSE NULL End)
from A a 
join B b
on a.ID= b.ID
0 голосов
/ 23 октября 2019

Используйте слияние для достижения следующего:

MERGE INTO TABLEA A USING (
                              SELECT
                                  ID,
                                  CASE FEATURE
                                      WHEN 'cat1'   THEN 1
                                      WHEN 'cat2'   THEN 0
                                  END AS CAT
                              FROM
                                  TABLEB
                          ) B ON ( A.ID = B.ID )
WHEN MATCHED THEN 
UPDATE SET A.CAT1_AVAIL = B.CAT

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...