2012-07-24 27 views
1

我需要一些mssql的帮助。我不知道任何来自mssql查询,但我知道一些编程。在某些情况下修改表的值

我有2个表,表A表B每一个有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) 

,我需要检查是否存在表A中的一行其中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

都与对方2个表? – praveen 2012-07-24 10:56:41

+0

都在同一个数据库,我不知道它是否可能,但修改一个不会修改其他 – 2012-07-24 10:59:12

回答

0

我不能让你的要求正确,但使用Merge下面的代码将ATLEAST帮助你在正确的方向。

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); 
+0

大部分时间ColumnA2将为0,如果我想先检查ColumnA2> 0,然后检查ColumnA1存在于ColumnB1中 – 2012-07-24 11:51:26

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) 
相关问题