【问题标题】:SQL Server: cannot perform an aggregate function on an expression containing an aggregate or a subquerySQL Server:无法对包含聚合或子查询的表达式执行聚合函数
【发布时间】:2015-10-20 12:38:39
【问题描述】:

我有这两张表:

存储:

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 是第二个)

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

【问题讨论】:

  • 我没有得到任何两个查询的错误,但如果我这样做:select sum (query 1) - sum(query 2) 然后我得到的错误是在主题中。

标签: sql sql-server


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    相关资源
    最近更新 更多