为什么此 T-SQL 查询会抛出 "aggregate function" 错误消息?
Why is this T-SQL query throwing an "aggregate function" error message?
我正在使用 SQL Server 2014 并且我有以下 SQL 查询 运行 没问题并给出以下输出:
SELECT
[PropertyCode], [BkgLeadTime], COUNT([Bkg Lead Time]) AS 'BLT COUNT'
FROM
BOOKINGLEADTIME_CTE
GROUP BY
[PropertyCode], [Bkg Lead Time]
输出:
PropertyCode BkgLeadTime BLT COUNT
----------------------------------------------
ZIL 1 4
ZIL 2 2
ZIL 5 1
ZIL 7 12
我需要更改上面的查询,以便结果只得到一行。基本上,我想计算上面显示的输出的加权平均值。
我的新查询如下:
SELECT
[PropertyCode],
SUM([Bkg Lead Time] * COUNT([Bkg Lead Time])) / SUM (COUNT([Bkg Lead Time])) AS 'Weighted AVG BLT'
FROM
BOOKINGLEADTIME_CTE
GROUP BY
[PropertyCode]
但是,当我 运行 查询时,SSMS 抛出以下错误:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
如何修改查询以避免此错误?我知道这与我使用的聚合语法有关,但我找不到重写此查询的正确方法。
预期输出为:
PropertyCode Weighted AVG BLT
ZIL 5.10
也许这会对你有所帮助
WITH CTE_TEST
AS
( SELECT [PropertyCode], [BkgLeadTime], COUNT([Bkg Lead Time]) AS 'BLT_COUNT'
FROM BOOKINGLEADTIME_CTE
GROUP BY [PropertyCode], [Bkg Lead Time]
)
SELECT SUM([BkgLeadTime]*[BLT_COUNT]) / SUM([BLT_COUNT]) FROM CTE_TEST
这样试试,
SELECT [PropertyCode]
,(SUM([Bkg Lead Time]) * COUNT([Bkg Lead Time])) / COUNT([Bkg Lead Time]) AS 'Weighted AVG BLT'
FROM BOOKINGLEADTIME_CTE
GROUP BY [PropertyCode]
我正在使用 SQL Server 2014 并且我有以下 SQL 查询 运行 没问题并给出以下输出:
SELECT
[PropertyCode], [BkgLeadTime], COUNT([Bkg Lead Time]) AS 'BLT COUNT'
FROM
BOOKINGLEADTIME_CTE
GROUP BY
[PropertyCode], [Bkg Lead Time]
输出:
PropertyCode BkgLeadTime BLT COUNT
----------------------------------------------
ZIL 1 4
ZIL 2 2
ZIL 5 1
ZIL 7 12
我需要更改上面的查询,以便结果只得到一行。基本上,我想计算上面显示的输出的加权平均值。
我的新查询如下:
SELECT
[PropertyCode],
SUM([Bkg Lead Time] * COUNT([Bkg Lead Time])) / SUM (COUNT([Bkg Lead Time])) AS 'Weighted AVG BLT'
FROM
BOOKINGLEADTIME_CTE
GROUP BY
[PropertyCode]
但是,当我 运行 查询时,SSMS 抛出以下错误:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
如何修改查询以避免此错误?我知道这与我使用的聚合语法有关,但我找不到重写此查询的正确方法。
预期输出为:
PropertyCode Weighted AVG BLT
ZIL 5.10
也许这会对你有所帮助
WITH CTE_TEST
AS
( SELECT [PropertyCode], [BkgLeadTime], COUNT([Bkg Lead Time]) AS 'BLT_COUNT'
FROM BOOKINGLEADTIME_CTE
GROUP BY [PropertyCode], [Bkg Lead Time]
)
SELECT SUM([BkgLeadTime]*[BLT_COUNT]) / SUM([BLT_COUNT]) FROM CTE_TEST
这样试试,
SELECT [PropertyCode]
,(SUM([Bkg Lead Time]) * COUNT([Bkg Lead Time])) / COUNT([Bkg Lead Time]) AS 'Weighted AVG BLT'
FROM BOOKINGLEADTIME_CTE
GROUP BY [PropertyCode]