Sql 使用交叉连接添加额外的列

Sql 使用交叉连接添加额外的列,sql,sql-server,join,common-table-expression,Sql,Sql Server,Join,Common Table Expression,这是我上一个问题的后续问题: 我想添加一个名为“总体平均”的列,以显示使用交叉联接的所有行的总体发货天数: 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

这是我上一个问题的后续问题:

我想添加一个名为“总体平均”的列,以显示使用交叉联接的所有行的总体发货天数:

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.Total Average’在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句“Error”中。有人能解释一下我为什么会出现这个错误以及如何修复它吗


谢谢

正如我在评论中所建议的,在您的选择中使用

 min(a.[Overall Average]) 
这将解决问题,并为您提供所需的输出


这将确保聚合函数用于select中而不是group by中的列。此外,由于您要从交叉联接中提取字段,因此可以使用任何聚合函数,如min、max等,结果/输出将是相同的。

示例数据、所需结果和适当的数据库标记将有所帮助。请在选择中使用min(a.[总体平均值])。这将解决问题,并将为您提供所需的输出。谢谢您的建议,Somy,它成功了!让我把它写在答案里,这样你就可以把它标记为已回答,这样这个帖子就解决了。谢谢