1

mssql のヘルプが必要です。mssql クエリについては何も知りませんが、プログラミングはある程度知っています。

TableATableBの 2 つのテーブルがあり、それぞれに ColumnA1、ColumnA2、ColumnB1、および ColumnB2 の 2 つの列があります。

このようなもの

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 
 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 に答える
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 に答える