我正在尝试显示每个位置的平均订单金额,并显示有多少订单的位置值大于所有位置的平均值。我尝试使用子查询进行比较,并得到“无法对包含聚合或子查询的表达式执行聚合函数”。好的,那么我通过我可以使用子查询进行外部应用并比较它,但它不会绑定值。我无法弄明白,可以使用一些帮助。这是我最新的询问:
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也没有帮助。
答案 0 :(得分:0)
NoDisplayName是正确的,我尊敬Alias ...我刚用LocAvg.Avg替换了AVG((Quantity.LocAvg * UnitPrice.LocAvg))并且它运行得很好。我觉得我好笨。