SQL Условное ОБНОВЛЕНИЕ на основе SELECT - PullRequest
4 голосов
/ 25 января 2012

В SQL Server 2008 у меня есть набор данных, содержащий затраты для Востока и Запада. Я добавляю новое поле для клиента для Канады, которое должно быть в 1,5 раза больше стоимости на восток или запад (что всегда больше). Поэтому я пытаюсь придумать какой-нибудь sql, который я могу выполнить. Я пробовал следующее, но безуспешно:

 UPDATE ShippingCost

 SET

    IF EastCost>WestCost

       Canada= EastCost*1.8

    ELSE

       Canada= WestCost*1.8
    ENDIF

Я уверен, что есть простой способ сделать это? Есть идеи?

Ответы [ 4 ]

14 голосов
/ 25 января 2012

Вам нужно использовать чехол

 UPDATE ShippingCost

 SET
     Canada = CASE WHEN EastCost>WestCost THEN  EastCost*1.8
                   ELSE WestCost*1.8 END
0 голосов
/ 26 января 2012
UPDATE ShippingCost
   SET Canada = 1.5 * CASE 
                         WHEN EastCost > WestCost THEN EastCost
                         ELSE WestCost
                      END;
0 голосов
/ 25 января 2012
 UPDATE ShippingCost SET Canada = GREATEST(EastCoast, WestCoast) * 1.8;

Примечание: T-SQL диалект не поддерживает GREATEST.

0 голосов
/ 25 января 2012

Используйте два оператора обновления:

UPDATE SHIPPINGCOST SET Canada = EastCost*1.8 WHERE EastCost>WestCost
UPDATE SHIPPINGCOST SET Canada = WestCost*1.8 WHERE EastCost<=WestCost 
...