繁体   English   中英

如何在一个查询中插入一张表并更新另一张表

[英]How to INSERT into 1 table and UPDATE another table in one query

我对如何编写单个查询进行插入和更新有疑问。 下面是方案。 我正在尝试对(-----)中包含的部分使用1个查询

CREATE TABLE #TEMP
(
    Ref VARCHAR(10),
    Num INT,
    [Status] VARCHAR(3)
)

INSERT INTO #TEMP
VALUES ('A123', 1, 'A3'), ('A123', 2, 'A3'), ('A123', 3, 'A3'),
       ('B123', 1, 'A1'), ('B123', 2, 'A3'), 
       ('C123', 1, 'A1'), ('C123', 2, 'A2'), ('C123', 3, 'A3');

SELECT
    Ref, 
    CASE WHEN A.TotalCount = A.DenialCount THEN 1 ELSE 0 END IsDenial
    --CASE WHEN A.TotalCount <> A.DenialCount Then 1 else 0 end IsApproval
INTO 
    #TEMP1
FROM
    (SELECT
         Ref, COUNT(Num) TotalCount,
         SUM(CASE WHEN [Status] = 'A1' THEN 1 ELSE 0 END) ApprovedCount,
         SUM(CASE WHEN [Status] = 'A2' THEN 1 ELSE 0 END) PartialApprovalCount,
         SUM(CASE WHEN [Status] = 'A3' THEN 1 ELSE 0 END) DenialCount
     FROM
         #temp
     GROUP BY
         Ref) A

UPDATE A
SET A.[Status] = CASE WHEN IsDenial = 1 THEN 'A3' ELSE 'A1' END 
FROM #TEMP A
JOIN #TEMP1 B ON A.Ref = B.Ref

SELECT * FROM #TEMP
SELECT * FROM #TEMP1

DROP TABLE #TEMP
DROP TABLE #TEMP1

任何帮助,将不胜感激。

“将INSERT插入1个表并在一个查询中更新另一个表”

不。 一些DBMS支持'upsert'的想法,但这是在单个表中插入/更新。

您正在寻找MERGE陈述。 但是,我在您的帖子中看到了几个与SQL有关的问题。 简而言之,使用集合论代替考虑每个语句的优化通常更有效。

而不是更新,为什么不将插入temp的数据加入第二个查询并产生所需的结果呢?

提示'SELECT'ABC'as a,'123'as b,456 as c UNION'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM