Оператор SQL Server Switch зависит от того, где находится внешний ключ - PullRequest
0 голосов
/ 14 мая 2019

У меня есть база данных, которая имеет следующий дизайн:

enter image description here

Что я хочу сделать, это обновить столбец в зависимости от того, где установлен внешний ключ. Заголовок актива всегда связан только с одним типом актива (грузовой автомобиль / прицеп / завод / легковой автомобиль)

Пример псевдокода:

UPDATE assets.AssetHeader
SET FleetExportAssignmentMethod = 1, 
    DataCaptureUnit = CASE
                         WHEN TRUCK THEN RegistrationNumber
                         WHEN TRAILER THEN ChassisNumber
                         WHEN COMPANYCAR THEN RegistrationNumber
                         WHEN PLANT THEN RegistrationNumber
                      END

Это вообще возможно сделать?

1 Ответ

1 голос
/ 14 мая 2019

Вы можете использовать LEFT JOIN для ввода значений, а затем COALESCE() для выбора среди них:

UPDATE ah
    SET FleetExportAssignmentMethod = 1, 
        DataCaptureUnit = COALESCE(t.RegistrationNumber, tr.ChassisNumber, cc.RegistrationNumber, p.RegistrationNumber)
    END
    FROM assets.AssetHeader ah LEFT JOIN
         TRUCK t
         ON t.AssetHeaderId = ah.id LEFT JOIN
         TRAILER tr
         ON tr.AssetHeaderId = ah.id LEFT JOIN
         COMPANYCAR cc
         ON cc.AssetHeaderId = ah.id LEFT JOIN
         PLANT p
         ON p.AssetHeaderId = ah.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...