0

同じ構造の 2 つのテーブルがあります: Table1(オリジナル) とTable2(更新)

すべてのデータTable1を変更せずに保持する必要があります。

Table2Table1元の情報と異なる可能性のある1 つの列を除いて、同じ情報を持つ 1 つまたはすべての行を持つQUANTITYことができます。

2 つのテーブルを結合し、結果として からのすべての行を表示するクエリが必要ですTable1が、 に一致が存在する場合は、代わりにTable2からの行を表示し、 からTable2の行を破棄して、列Table1の合計または減算を表示しますQUANTITY

例:

表1

Product    Quantity

Shirt      3
Pants      5
Shoes      9

表 2

Product    Quantity

Pants      2

結果:

Product    Quantity
---------------
Shirt      3
Pants      3
Shoes      9

それは 1 つのクエリから可能ですか、それとも追加のコードを使用する必要がありますか (私は C# と LINQ を使用しています)。

4

3 に答える 3

1
var query = from table1 in data.Table1s
                join table2 in data.Table2s
                on table1.ID equals table2.ID
    into x            
    select new {
        table1.Shirt,
        Pants = x.Sum(c=>c.Pants) + table1.Pants,
        table1.Shoes
};
于 2013-08-30T17:26:37.503 に答える
0

それはすべてテーブルのレイアウトに依存します。table1 からレコードを削除せず、非アクティブとして設定するように、テーブルにアクティブ フラグを設定することをお勧めします。次に、Case ステートメントを使用して、必要なことを正確に行うことができます。

したがって、次のクエリを使用して、データ型ビットを使用してテーブル 1 (IsActive) に列を追加します。

DECLARE @tResult TABLE
(ProductName varchar(max),
 ProductQTY int,
 ToSetInactive int)



       INSERT INTO @tResult
       Select
        ProductName,
        CASE WHEN tbl1.ProductName =  tbl2.ProductName THEN DO YOUR LOGIC HERE ELSE DO SOME OTHER LOGIC HERE END AS QTY,
       ProductName,
        CASE WHEN tbl1.ProductName = tbl2.ProductName THEN tbl1.Id ELSE 0 END AS ToSetAsInactive
       From Table1 tbl1     
      INNER JOIN Table2 tbl2 on tbl2.ProductName = tbl2.ProductName

     UPDATE TABLE1 set IsActive WHERE ID in (select ToSetInactive from @tResult) 

     Select * From @Result

お役に立てれば

于 2013-08-30T16:43:58.643 に答える