2015-10-20 67 views
0

我有这两个表:SQL服务器:不能在一个表达式执行聚合函数包含聚合或子查询

存储:

id (int, PK) 
articleNr (nvarchar(10)) 
shelf (nvarchar(10)) 
number (int) 

订单:

orderNr (int, PK) 
articleNr (nvarchar(10)) 
ordered (int) 
picked (int) 

我想了解某个物品编号有多少项目可供购买。

这样的物品的总数只是

select sum(number) 
from storage 
group by articleNr 

而有序,没有拿起物品的数量只是

select sum(ordered) - sum(picked) 
from orders 
group by articleNr 

因此,所有我想做的事真的是只减去后者来自前者,我有我的答案,但是当我尝试在查询中这样做时,我无法这样做,因为它是SUM内的SUM。我真正想要做的是一样的东西:

select sum(query1) - sum(query2) 

(其中QUERY1高于第一查询和QUERY2第二)

但是,当我这样做,我得到的错误信息是在主题。

+0

我没有得到任何我有疗法两个查询的错误,但如果我这样做: 选择总和(查询1) - 和(2查询) 然后我得到这个问题的错误。 –

回答

1

也许这:

select coalesce(s.articleNr, o.articleNr) as articleNr, 
    coalesce(s.q_stored,0) - coalesce(o.q_topick,0) as q_remaining 
from (
    select articleNr, sum(number) as q_stored 
    from storage 
    group by articleNr) s 
full join (
    select articleNr, sum(ordered) - sum(picked) as q_topick 
    from orders 
    group by articleNr 
) o on o.articleNr = s.articleNr 
+0

这似乎工作!谢谢! –

相关问题