2015-10-15 4 views
-1
DECLARE @use10percent INT 

SELECT 
    @use10percent = COUNT(*) 
FROM 
    [dbo].[CUSTOMER_ORDER] o 
INNER JOIN 
    [dbo].[CUSTOMER] c ON c.ID = o.CUSTOMER_ID 
INNER JOIN 
    [dbo].[CUST_ADDRESS] ca ON ca.CUSTOMER_ID = o.CUSTOMER_ID 
          AND ca.ADDR_NO = o.[SHIP_TO_ADDR_NO] 
WHERE 
    o.[ID] = @CUST_ORDER_ID 
    AND (isnull(ca.STATE, c.STATE) IN ('AB','BC','MB','MT','NB','NS','ON','PQ','QC','SK','TX','NY')) 

/**/ 
UPDATE SHIPPER_LINE 
SET ACT_FREIGHT = CONVERT(DECIMAL(10, 2), 
        (CASE 
         WHEN CAST(ShipWeight AS Float) >= 400 
          THEN CAST(Rate AS Float) * 1.06 
         WHEN CAST(ShipWeight AS Float) < 400 
          THEN CASE 
            WHEN @use10percent = 0 
             THEN CAST(Rate AS Float) * 1.20 
            ELSE CAST(Rate AS Float) * 1.10 --New rate for Canada, TX, and NY 
           END 
         ELSE CAST(Rate AS Float) 
         END)) 

Целью этого триггера является добавление 10% к стоимости фрахта, когда вес составляет менее 400 фунтов, а местом назначения является NY, TX или вся Канада. Он работает, если клиент использует адрес drop ship (ca.state), и я получаю 10% -ный прирост. Но если клиент является покупателем и пунктом назначения, (ca.state) является нулевым, и необходимо использовать (c.state). Приведенный выше код добавляет полные 20%, если (ca.state) имеет значение null, а (c.state) - NY, TX или Канада.Использование ISNULL в том месте, где статья

Как исправить положение where, чтобы правильно фильтровать?

+0

Что вы хотите сказать? –

+0

Как получить предложение where для использования c.state, когда ca.state имеет значение NULL? Приведенный выше код дает 20% увеличение, когда c.state является NY, когда я хочу, чтобы он увеличивался только на 10%. – Ian

ответ

0

WHERE часть о проверке ГОСУДАРСТВА, кажется, хороша: isnull (cSTATE, c.STATE) IN ('AB', 'BC', 'MB', 'MT', 'NB', 'NS ',' ON ',' PQ ',' QC ',' SK ',' TX ',' NY ') Если он добавляет 20%, это означает, что @ use10percent равен нулю, вы уверены, что JOIN и данные в таблицах ? Вы пытались удалить COUNT и посмотреть результат SELECT?

+0

После того как я попытался сделать выбор самостоятельно, я обнаружил, что он исключил правильные результаты. Изменение соединения cust_address от внутреннего соединения к левому соединению решило проблему. Теперь триггер работает правильно. – Ian

Смежные вопросы