0

我有两个结构相同的表:(Table1原始)和Table2(更新)

我必须保持所有数据Table1不变。

Table2可能有 1 行或所有行Table1具有相同的信息,除了一列QUANTITY可能与原始列不同。

我想要一个我们加入两个表的查询,结果显示所有行,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

这可以通过一个查询实现吗,还是我应该使用额外的代码(我使用的是 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
select table1.product, isnull(table1.quantity - table2.quantity, table1.quantity) as Quantity 
from table1
left join table2
on table1.product = table2.product
于 2013-08-30T22:45:19.873 回答
0

好吧,这完全取决于您的表格布局,我建议您在表格中设置一个活动标志,这样您就不会从 table1 中删除记录,而只是将其设置为非活动状态。然后,您可以使用Case Statement来完全按照您的意愿行事。

因此,使用以下查询向表 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 回答