Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在where子句中使用ISNULL_Sql Server 2008 - Fatal编程技术网

Sql server 2008 在where子句中使用ISNULL

Sql server 2008 在where子句中使用ISNULL,sql-server-2008,Sql Server 2008,该触发器的目标是在重量低于400磅且目的地州为纽约州、德克萨斯州或加拿大全境时,增加10%的运费。如果客户使用直运地址ca.state,我就可以得到10%的增长,这是可行的。但是,如果客户是买家和目的地,则ca.state为null,需要使用c.state。如果ca.state为null,而c.state为NY、TX或Canada,则上述代码将添加完整的20% 如何修复where子句以正确过滤 关于状态检查的WHERE部分似乎很好: isnullca.STATE,c.STATE在'AB','BC

该触发器的目标是在重量低于400磅且目的地州为纽约州、德克萨斯州或加拿大全境时,增加10%的运费。如果客户使用直运地址ca.state,我就可以得到10%的增长,这是可行的。但是,如果客户是买家和目的地,则ca.state为null,需要使用c.state。如果ca.state为null,而c.state为NY、TX或Canada,则上述代码将添加完整的20%


如何修复where子句以正确过滤

关于状态检查的WHERE部分似乎很好: isnullca.STATE,c.STATE在'AB','BC','MB','MT','NB','NS','ON','PQ','QC','SK','TX','NY'中
如果它加20%,就意味着@use10percent为零,您确定要将连接和数据加入表中吗?您是否尝试删除COUNT并查看关于SELECT result的信息?

您的问题是什么?当ca.state为null时,如何让where子句使用c.state?当c.state为NY时,上面的代码会增加20%,而我希望它只增加10%。在尝试select语句时,我发现它排除了正确的结果。将cust_地址联接从内部联接更改为左联接解决了此问题。触发器现在可以正常工作了。
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))