2014-03-05 15 views
0

我有两个Microsoft SQL查询,它们都提供两列但行数不同。这些结果如下:如何从具有不同行数的两个单独的MS SQL查询中添加两列

首先查询:

ProductID, Inventory 
1, 100 
2, 50 
3, 200 

第二个查询:

ProductID, Sales 
1, -20 
2, -50 

我想要得到以下的输出:

ProductID, BalanceInventory 
1, 80 
2, 0 
3, 200 

我一直在使用加号试在这样的查询中:

Select t1.ProductID, 
     t1.Inventory + (Case when t2.Sales is null then 0 else t2.Sales end) as 'BalanceInventory' 
    from t1 full join t2 on t1.ProductID = t2.ProductID 

问题在于数据库结构的设计方式使销售和库存无法在同一查询中运行。 因此,我需要运行两个单独的查询,然后为每个ProductID添加两列“库存和销售额”。

实际的数据库结构和查询要复杂得多。我试图通过创建一个假设来简化问题。

请帮忙。这是吃了我的头。

感谢, 卡兰

+0

您当前的查询看起来不错,它应该按原样运行。现在,您的实际查询有多复杂?不用看实际的查询就没有什么可说的了。 –

回答

1

试试这个

select ProductID, (inv.Inventory + s.Sales) as BalanceInventory 
from 
( 
    select ProductID, Inventory 
    from [table] 
    where xxx 
) inv 
left outer join 
(
    select ProductID, Sales 
    from [table] 
    where xxx 
) s on (s.ProductID = inv.ProductID) 
+0

谢谢你Lwin Oo。这对Thiago Cardoso提出的IsNull部分稍作修改。我用这个代码: 选择的ProductID,(inv.Inventory + ISNULL(s.Sales,0))作为BalanceInventory 从 ( 选择的ProductID,库存 从[表] 其中xxx )INV 左外连接 ( 选择产品ID,销售 从[表] 其中xxx )S ON(s.ProductID = inv.ProductID) – user3385784

+0

要知道,如果有一个或更多的销售记录,但对产品没有库存记录,这解决方案将完全忽略该产品。即它根本不包括销售。 –

+0

谢谢ElectricLlama ..我想通了..但在我的情况下,销售记录总是一个库存记录的子集..谢谢你的警惕.. – user3385784

0

你能避免使用CASE表达式 “的isNull(表达式,0)”。

关于你的问题,如果你不能在查询中使用任何连接,尝试使用UNION操作: http://technet.microsoft.com/en-us//library/ms180026.aspx

+0

在我所有的查询中,我使用了case表达式来避免null值。我不知道IsNull。感谢蒂亚戈。这会帮助我很多。干杯。!! – user3385784

1

另一种选择是

SELECT UnionTable.ProductID, SUM(UnionTable.BalanceInventory) AS BalanceInventory 
FROM (
    SELECT ProductID, Inventory As BalanceInventory 
    FROM Table1 
    UNION ALL 
    SELECT ProductID, Sales As BalanceInventory 
    FROM Table2 
) As UnionTable 
GROUP BY UnionTable.ProductID 

要减去而不是相加,简单地使一部分为负数:

SELECT UnionTable.ProductID, SUM(UnionTable.BalanceInventory) AS BalanceInventory 
FROM (
    SELECT ProductID, Inventory As BalanceInventory 
    FROM Table1 
    UNION ALL 
    SELECT ProductID, -Sales As BalanceInventory 
    FROM Table2 
) As UnionTable 
GROUP BY UnionTable.ProductID 
+0

谢谢ElectricLlama。该解决方案也可以正常工作。我尝试了两种解决方案并获得了相同的结果。 只有一个问题,在情况下,我们必须减去两个值,我们怎么更换SUM一部分? – user3385784

+0

使用我的sql脚本。只是改变(inv.Inventory - s.Sales) –

+0

是Thit Lwin Oo。我做到了,得到了结果。只是想知道如何修改ElectricLlama给出的查询来减去值而不是添加它们。不管怎样,谢谢你们所有人。我想我应该在一个小时后发布这个查询。可以节省一些时间。干杯。!! – user3385784

相关问题