2012-07-24 75 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) 
相關問題