首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当存在时使用case进行更新(不要得到正确的结果)

当存在时使用case进行更新(不要得到正确的结果)
EN

Stack Overflow用户
提问于 2014-09-22 09:43:26
回答 2查看 121关注 0票数 1

我正在尝试更新一个表,该表由两个流组成,第一个流必须使FillRateCode (我想更新的列)从BWH_OTC_Order中变为FillRateCode,但是对于第二个流,我认为它等于'-1‘。

这是我的剧本:

代码语言:javascript
代码运行次数:0
运行
复制
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

这就是我得到的结果

代码语言:javascript
代码运行次数:0
运行
复制
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‘

有什么问题吗?

平流

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-22 09:51:47

您可以使用ISNULLCOALESCENULL替换为其他东西。您的exists( select 1 from tmp)是没有意义的,因为它只检查是否有任何行(所以不仅仅是相关行)。

代码语言:javascript
代码运行次数:0
运行
复制
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 
票数 0
EN

Stack Overflow用户

发布于 2014-09-22 09:51:02

也许我误解了您的问题,但是如果您只想用-1替换空值,可以使用isnull函数。

代码语言:javascript
代码运行次数:0
运行
复制
isnull(tmp.FillRateCode,-1) -- I'm guessing the -1 is an int, and not a char '-1'

而不是

代码语言:javascript
代码运行次数:0
运行
复制
case when  exists ( select 1 from tmp) then tmp.FillRateCode else '-1' end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25971035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档