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