2013-08-30 65 views
0

我有兩個表具有相同的結構:Table1(原件)和Table2(更新)SQL Server 2005或LINQ查詢:將兩個表和計算領域

我必須保持從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)?

回答

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 
}; 
0

這一切都取決於你的表格佈局,我建議在你的表中有一個活動標誌,這樣你就不會從table1中刪除記錄,而只是將它設置爲非活動狀態。然後你可以用Case Statement來做你想要的。

所以列與數據類型bit使用添加到表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 

希望這有助於

0
select table1.product, isnull(table1.quantity - table2.quantity, table1.quantity) as Quantity 
from table1 
left join table2 
on table1.product = table2.product