[英]How to update a column status in another table from previous query result
我在 SQL Server 2014 中工作。我運行的查詢結果 2 列,一個是 ID,另一個是票號。
現在在另一個DW-STG
表上有列ID
、 Ticketnumber
和cancel_YN
。
我想要做的是將cancel_YN
列的狀態更新為Y
對於那些由我之前運行的查詢返回的票號,該查詢返回ID
和Ticketnumber
。
下面是輸出 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.