我对如何编写单个查询以进行插入和更新有疑问。下面是方案。我正在尝试对(-----)
中包含的部分使用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
任何帮助将不胜感激。
答案 0 :(得分:0)
“在一个查询中插入1个表并更新另一个表”
不。一些DBMS支持“ upsert”的想法,但这是在单个表中插入/更新。
答案 1 :(得分:0)
您正在寻找MERGE语句。但是,我在您的帖子中看到了几个与SQL有关的问题。简而言之,使用集合论比考虑每个语句的优化通常更有效。
而不是更新,为什么不将插入temp的数据加入第二个查询并产生所需的结果呢?
提示'选择'ABC'作为a,'123'作为b,456作为c UNION'