1

我需要一些有关 mssql 的帮助。我对 mssql 查询一无所知,但我知道一些编程。

我有 2 个表,TableATableB每个都有 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  
4

2 回答 2

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);  
于 2012-07-24T11:27:55.410 回答
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)  
于 2012-07-24T11:34:16.977 回答