【发布时间】:2020-09-16 01:24:22
【问题描述】:
这是我上一个问题的后续问题: Identifier could not be bound in multiple common table expressions
我想添加一个名为“总体平均”的列来显示使用 CROSS JOIN 的所有行的总体运输天数:
WITH orderDetails (days, state)
AS(
SELECT DATEDIFF(day, o.OrderDate, ol.ShipDate), o.State
FROM SQLBook.dbo.Orders o
JOIN [SQLBook].dbo.OrderLines ol
ON ol.OrderId = o.OrderId
)
,
/* This finds the overall average shipping days */
AvgShipping (avgShip)
AS(
SELECT AVG(DATEDIFF(day, o.OrderDate, ol.ShipDate))
FROM SQLBook.dbo.Orders o
JOIN [SQLBook].dbo.OrderLines ol
ON ol.OrderId = o.OrderId
)
SELECT
ord.state,
AVG(ord.days) AS "Average days to ship",
a.[Overall Average] AS "Overall Average"
FROM orderDetails ord
CROSS JOIN
(SELECT avgShip AS "Overall Average" FROM AvgShipping) a
GROUP BY state
HAVING AVG(days) > (SELECT avgShip FROM AvgShipping)
ORDER BY state
但是我得到一个“列 'a.Overall Average' 在选择列表中无效,因为它既不包含在聚合函数或 GROUP BY 子句中”错误。有人能解释一下为什么我会收到这个错误以及如何解决它吗?
谢谢
【问题讨论】:
-
样本数据、所需结果和适当的数据库标签会有所帮助。
-
在您的选择中使用 min(a.[Overall Average])。这应该可以解决问题并为您提供所需的输出。
-
感谢您的建议,Somy,成功了!
-
让我把它放在答案中,以便您可以将其标记为已回答,以便帖子得到解决。谢谢。
标签: sql sql-server join common-table-expression