我需要一些mssql的帮助。我从mssql查询中不知道任何事情,但我知道一些编程。
我有2个表, TableA 和 TableB 每个表都有2列 ColumnA1,ColumnA2,ColumnB1和ColumnB2
像这样的东西
create table DB.dbo.TableA
(ColumnA1 varchar(10),
ColumnA2 int)
create table DB.dbo.TableB
(ColumnB1 varchar(10),
ColumnB2 int)
我需要检查TableA中是否存在一行,其中ColumnA2> 0
如果是的话,那么,
如果ColumnB1中存在任何可能的行,则
更新ColumnB2 = ColumnB2 + ColumnA2并设置ColumnA2 = 0
ELSE
在TableB中插入一个新行,ColumnB1 = ColumnA1,ColumnB2 = ColumnA1,并设置ColumnA2 = 0
我甚至不知道从哪里开始,我试着以最好的方式解释它。
编辑: 在剧本之前
TableA:
ColumnA1 ColumnA2
John 0
Sam 1
Mark 1
TableB:
ColumnB1 ColumnB2
Sam 5
脚本应该是这样的:
TableA:
ColumnA1 ColumnA2
John 0
Sam 0
Mark 0
TableB:
ColumnB1 ColumnB2
Sam 6
Mark 1
答案 0 :(得分:0)
我无法正确满足您的要求,但使用Merge
的以下代码将帮助您朝着正确的方向前进。
MERGE TableB B
USING TableA A
ON A.ColumnA1 = B.ColumnB1 //The columns which related to both the tables
WHEN MATCHED AND
A.ColumnA2>0 THEN
UPDATE
SET B.ColumnB2 = B.ColumnB2 + A.ColumnA2
when not matched by target Then
Insert(ColumnB1,ColumnB2)
values (A.ColumnA1,A.ColumnB2)
Output A.ColumnA1 into @t;
Update TableA
Set ColumnA2=0
WHERE ColumnA1 in (SELECT ColumnA1
FROM @t);
答案 1 :(得分:0)
您应该使用MERGE
语法
merge TableB
using
(select * from tablea where ColumnA2>0) source
ON source.ColumnA1 = tableb.ColumnB1
when matched then
update
set tableb.ColumnB2 = tableb.ColumnB2 + source.ColumnA2
when not matched by target Then
insert(ColumnB1,ColumnB2)
values (source.ColumnA1,source.ColumnA2)