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

时间:2018-07-03 15:31:57

标签: sql

我对如何编写单个查询以进行插入和更新有疑问。下面是方案。我正在尝试对(-----)

中包含的部分使用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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

提示'选择'ABC'作为a,'123'作为b,456作为c UNION'

相关问题