我有两个Microsoft 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 添加两列Inventory和Sales。
实际的数据库结构和查询要复杂得多。我试图通过创建一个假设的问题来简化问题。
请帮忙。这吃了我的头。
谢谢, 卡兰
答案 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)
答案 1 :(得分: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
答案 2 :(得分:0)
您可以使用“isNull(expr,0)”来避免使用case表达式。
关于您的问题,如果您不能在查询中使用任何JOIN,请尝试使用UNION运算符: http://technet.microsoft.com/en-us//library/ms180026.aspx