【发布时间】:2014-12-02 17:34:13
【问题描述】:
我正在尝试显示每个位置的平均订单金额,并显示有多少订单的该位置的值大于所有位置的平均值。我尝试使用子查询进行比较并得到“无法对包含聚合或子查询的表达式执行聚合函数”。好的,那么我可以通过子查询进行外部应用并进行比较,但它不会绑定值。我无法弄清楚,可以使用一些帮助。这是我的最新查询:
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 也没有帮助。
【问题讨论】:
-
您的 from 子句中没有 Quantity,既不是表也不是别名。
-
看起来
Quantity和UnitPrice是列名 -
Quantity 和 UnitPrice 是列名...我想我没有关注。
-
那么你不能使用
Quantity.LocAvg,就像Columnname.columname一样,这是不允许的。它应该是表别名或表名点列名,如tablename.columnname -
伙计,我知道......我应该抓住它。谢谢 NoDisplayName!
标签: sql sql-server average outer-join