簡體   English   中英

如何從以前的查詢結果更新另一個表中的列狀態

[英]How to update a column status in another table from previous query result

我在 SQL Server 2014 中工作。我運行的查詢結果 2 列,一個是 ID,另一個是票號。

現在在另一個DW-STG表上有列IDTicketnumbercancel_YN

我想要做的是將cancel_YN列的狀態更新為Y對於那些由我之前運行的查詢返回的票號,該查詢返回IDTicketnumber

下面是輸出 ID 和 Ticketnumber 的查詢代碼。

select 
    STG2_SBR_PNR_HEADER.HID, DW_SBR_FARES_FAFH.Ticketnumber
from 
    STG2_SBR_PNR_HEADER
join
    DW_SBR_FARES_FAFH on STG2_SBR_PNR_HEADER.HID = DW_SBR_FARES_FAFH.HID

except

select 
    STG2_SBR_FARES_FAFH.HID, STG2_SBR_FARES_FAFH.Ticketnumber 
from 
    STG2_SBR_FARES_FAFH

查詢返回的數據示例:

ID     Ticketnumber
-------------------
1      123
2      456

DW_STG 表中的期望結果:

ID    Ticket    Cancel_YN
---------------------------------------------------
1     123         Y (previously by default it is N)
2     456         Y (previously by default it is N)
3     745         N

如果您發布的查詢給出了您想要的結果,您可以在更新語句中使用它
唯一的區別是它必須只返回列DW_SBR_FARES_FAFH.Ticketnumber

update DW-STG
set cancel_YN = 'y'
where Ticketnumber IN (
  select DW_SBR_FARES_FAFH.Ticketnumber
  from STG2_SBR_PNR_HEADER
  JOIN DW_SBR_FARES_FAFH ON STG2_SBR_PNR_HEADER.HID=DW_SBR_FARES_FAFH.HID
  except
  select STG2_SBR_FARES_FAFH.HID,STG2_SBR_FARES_FAFH.Ticketnumber from 
  STG2_SBR_FARES_FAFH
)

我會推薦MERGE 請參閱以下示例:

DECLARE @DWSTG TABLE (
    ID int,
    Ticketnumber int,
    cancel_YN char(1)
);

INSERT @DWSTG VALUES
(1,10,'N'),
(2,20,'N'),
(3,30,'N'),
(4,40,'N');

MERGE @DWSTG Dest
USING (
    --here comes your query
    SELECT * FROM (VALUES (2, 20), (3,30)) T(ID, TicketNumber)
) Src
ON Dest.ID=Src.ID AND Dest.TicketNumber = Src.TicketNumber
WHEN MATCHED THEN UPDATE SET cancel_YN = 'Y';

SELECT * FROM @DWSTG;

結果:

ID          Ticketnumber cancel_YN
----------- ------------ ---------
1           10           N
2           20           Y
3           30           Y
4           40           N

您可以將該查詢放在 CTE 中。
然后在更新中,將表加入其中的唯一票號。

WITH CTE AS
(
   SELECT fafh.Ticketnumber, fafh.HID
   FROM DW_SBR_FARES_FAFH fafh
   JOIN STG2_SBR_PNR_HEADER head ON head.HID = fafh.HID

   EXCEPT

   SELECT Ticketnumber, HID
   FROM STG2_SBR_FARES_FAFH
)
UPDATE t
SET cancel_YN = 'Y'
FROM DW-STG t
JOIN (SELECT DISTINCT Ticketnumber FROM CTE) q
  ON q.Ticketnumber = t.Ticketnumber;

您可以通過以下方式使用inner join來嘗試此操作。

create table firstResult (ID int, Ticketnumber int)
insert into firstResult values (1, 123), (2, 456)

create table secondResult (ID int, Ticketnumber int, Cancel_YN char(1) default 'N')
insert into secondResult (Id, TicketNumber) values(1, 123),(2, 456),(3,745)

update s 
set s.Cancel_YN = 'Y'
from firstResult as f
inner join secondResult s on s.Ticketnumber = f.TicketNumber

select * from secondResult

這里我假設firstResult是第一個查詢輸出的表, secondResult表是第二個查詢輸出的表。 您可以用括號()實際查詢替換兩個表名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM