Обновление SQL - несколько строк и несколько критериев в одном операторе SQL

Я пытаюсь обновить два поля на основе двух разных критериев, и я не могу понять, как сделать это в одном операторе SQL.

Это возможно без петли?

Вот несколько примеров того, чего я пытаюсь достичь:

Update Leadtimes Set Leadtime = 10 Where supplier = 123 and location = 1;
Update Leadtimes Set Transit_Leadtime = 5 Where supplier = 123 and location = 1;
Update Leadtimes Set Leadtime = 12 Where supplier = 123 and location = 2;
Update Leadtimes Set Transit_Leadtime = 6 Where supplier = 123 and location = 2;
Update Leadtimes Set Leadtime = 5 Where supplier = 223 and location = 1;
Update Leadtimes Set Transit_Leadtime = 3 Where supplier = 223 and location = 1;
Update Leadtimes Set Leadtime = 7 Where supplier = 223 and location = 2;
Update Leadtimes Set Transit_Leadtime = 2 Where supplier = 223 and location = 2;

Это заявление, которое я нашел в Интернете, что мне не удалось изменить работу.

UPDATE categories
    SET display_order = CASE id
        WHEN 1 THEN 3
        WHEN 2 THEN 4
        WHEN 3 THEN 5
    END,
    title = CASE id
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
    END
WHERE id IN (1,2,3) 

2 ответа

Update Leadtimes 
    Set 
        Leadtime = CASE CAST(supplier AS VARCHAR(MAX)) + CAST(location AS VARCHAR(MAX))
            WHEN '1231' THEN 10
            WHEN '1232' THEN 12
            WHEN '2231' THEN 5
            WHEN '2232' THEN 7
        END,
        Transit_Leadtime = CASE CAST(supplier AS VARCHAR(MAX)) + CAST(location AS VARCHAR(MAX))
            WHEN '1231' THEN 5
            WHEN '1232' THEN 6
            WHEN '2231' THEN 3
            WHEN '2232' THEN 2
        END 
Where supplier in (123, 223) and location in (1, 2);

Вот результаты:

Update Leadtimes Set Leadtime = 10 Where supplier = 123 and location = 1;
Update Leadtimes Set Transit_Leadtime = 5 Where supplier = 123 and location = 1;

Может быть написано как:

UPDATE Leadtimes SET Leadtime = 10, Transit_Leadtime = 5 WHERE supplier = 123 AND location = 1;

Я подготовил бы заявление формы:

UPDATE Leadtimes SET Leadtime = ?, Transit_Leadtime = ? WHERE supplier = ? AND location = ?;

А затем выполните его для всех квадов данных, которые мне нужны.

Другие вопросы по тегам