SQL Server:无法对包含聚合或子查询的表达式执行聚合函数

时间:2015-10-20 12:38:40

标签: sql sql-server

我有这两个表:

存储

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中。我真正想要做的是:

select sum(query1) - sum(query2)

(其中query1是上面的第一个查询,query2是第二个查询)

但是当我这样做时,我会收到主题中的错误消息。

1 个答案:

答案 0 :(得分: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