SQL:按位置比较所有订单的平均值

时间:2014-12-02 17:34:13

标签: sql sql-server average outer-join

我正在尝试显示每个位置的平均订单金额,并显示有多少订单的位置值大于所有位置的平均值。我尝试使用子查询进行比较,并得到“无法对包含聚合或子查询的表达式执行聚合函数”。好的,那么我通过我可以使用子查询进行外部应用并比较它,但它不会绑定值。我无法弄明白,可以使用一些帮助。这是我最新的询问:

SELECT 
    PUE.LocID, 
    PUE.Name, 
    IsNull(sum(PUOS.Quantity),0) as [Quantity], 
    AVG((PUOS.Quantity * PUOS.UnitPrice)) AS [Avg Order Value], 
    sum(
        case when (PUOS.Quantity * PUOS.UnitPrice) > 
                AVG((Quantity.LocAvg * UnitPrice.LocAvg)) Then 1 
        else 0 end) 
    AS [Greater Loc Avg]
FROM Locations PUE
    OUTER APPLY (select AVG((Quantity * UnitPrice)) as Avg from Sales
                    WHERE CONVERT(date,SaleDate) <= '2014-11-30' 
                        AND PackageID <> 999  
                        AND LocID > 7598 
                        AND LocID < 7622) LocAvg
    LEFT OUTER JOIN Sales PUOS 
        ON PUOS.LocID = PUE.LocID and 
            CONVERT(date,PUOS.SaleDate) <= '2014-11-30' 
                AND PUOS.PackageID <> 999  
            WHERE PUE.LocID > 7598
                AND PUE.LocId < 7622
                AND PUE.GroupID = 473
GROUP BY PUE.LocID, PUE.Name
ORDER BY PUE.LocID, PUE.Name;

这不起作用,因为:无法绑定多部分标识符“Quantity.LocAvg”。 无法绑定多部分标识符“UnitPrice.LocAvg”。我尝试使用Avg.LocAvg来提供相同的错误。我确信有一种更简单的方法可以做到这一点,但它并没有找到我,我的Google-Fu也没有帮助。

1 个答案:

答案 0 :(得分:0)

NoDisplayName是正确的,我尊敬Alias ...我刚用LocAvg.Avg替换了AVG((Quantity.LocAvg * UnitPrice.LocAvg))并且它运行得很好。我觉得我好笨。