在某些条件下修改表的值

时间:2012-07-24 10:50:04

标签: sql sql-server

我需要一些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  

2 个答案:

答案 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)