1

Я пытаюсь обновить таблицу, которая питается 2 потоками, 1-й мне нужно сделать FillRateCode (колонку, которую я хочу обновить), равную FillRateCode от BWH_OTC_Order, но для 2-го потока я поставил его равным «-1»UPDATE, используя случай, когда существует (не получается правильный результат)

это мой сценарий:

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 

для обнуляет правильное переключение - ge t '-1' в DMT_FillRateCode

Есть вопросы?

Thx по advence

ответ

0

Вы можете использовать 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 
+0

ok ... спасибо –

0

Может быть, я искажая ваш вопрос, но если вы просто хотите, чтобы заменить нулевые значения с -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 
+0

ok thx it works –

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