我正在尝试更新一个表,该表由两个流组成,第一个流必须使FillRateCode (我想更新的列)从BWH_OTC_Order中变为FillRateCode,但是对于第二个流,我认为它等于'-1‘。
这是我的剧本:
use BITS
;with tmp as (
select SalesOrderItemNum, SalesOrderNum, FillRateCode
From
BWH_OTC_Order
INNER JOIN REF_Company Comp
ON (Comp.CompanyCode= BWH_OTC_Order.CompanyCode AND Comp.DivisionCode='TEE')
where RevisedPGIDate is not null
)
UPDATE bits_tee.dbo.DMT_TEE_OTC_OrderFulFill
SET FillRateCode = case when exists ( select 1 from tmp) then tmp.FillRateCode else '-1' end
FROM bits_tee.dbo.DMT_TEE_OTC_OrderFulFill DMT
left outer join tmp
on tmp.SalesOrderItemNum = DMT.SalesOrderItemNum
and tmp.SalesOrderNum = DMT.SalesOrderNum
这就是我得到的结果
NB BWH_FillRateCode DMT_FillRateCode
124457 NULL NULL
73991 0 0
457507 1 1
28632 -1 -1
4849 2 2
34262 3 3
对于空值,正确的选择是在DMT_FillRateCode中得到'-1‘
有什么问题吗?
平流
发布于 2014-09-22 01:51:47
您可以使用ISNULL
或COALESCE
将NULL
替换为其他东西。您的exists( select 1 from tmp)
是没有意义的,因为它只检查是否有任何行(所以不仅仅是相关行)。
WITH tmp
AS (SELECT SalesOrderItemNum,
SalesOrderNum,
FillRateCode
FROM BWH_OTC_Order
INNER JOIN REF_Company Comp
ON ( Comp.CompanyCode = BWH_OTC_Order.CompanyCode
AND Comp.DivisionCode = 'TEE' )
WHERE RevisedPGIDate IS NOT NULL)
UPDATE DMT
SET DMT.FillRateCode = ISNULL(tmp.FillRateCode, '-1')
FROM bits_tee.dbo.DMT_TEE_OTC_OrderFulFill DMT
LEFT OUTER JOIN tmp
ON tmp.SalesOrderItemNum = DMT.SalesOrderItemNum
AND tmp.SalesOrderNum = DMT.SalesOrderNum
发布于 2014-09-22 01:51:02
也许我误解了您的问题,但是如果您只想用-1替换空值,可以使用isnull函数。
isnull(tmp.FillRateCode,-1) -- I'm guessing the -1 is an int, and not a char '-1'
而不是
case when exists ( select 1 from tmp) then tmp.FillRateCode else '-1' end
https://stackoverflow.com/questions/25971035
复制相似问题