问题描述
SELECT [doc type],[Open Amount],[customer number],COUNT([customer number]) As CountCustomerNumber,SUM(IIF([Open Amount]>'0',0)) AS sum_open_amount_pos,SUM(IIF([Open Amount]<'0',0)) As sum_open_amount_neg
FROM
(SELECT d.[customer number] & d.[membership number] AS CustMemb,d.[customer number],agg.[Open Amount],agg.[doc type],SUM(agg.[Open Amount]) AS SumOpenAmount
FROM (SELECT [doc type],SUM([Open Amount]) AS TotalSubOpenAmount
FROM data
WHERE [doc type] = 'RU'
GROUP BY [doc type],[customer number]
) agg
INNER JOIN [data] d
ON d.[customer number] = agg.[customer number]
GROUP BY d.[customer number] & d.[membership number],agg.[Open Amount]
) AS sub
GROUP BY [doc type],[Open Amount]
HAVING COUNT([customer number]) = 1
在 Group BY 子句中添加了未结金额 - 为 agg.Open Amount 寻找参数值 ------------------------------ -----------
解决方法
请参阅以下 stackoverflow 帖子:“You tried to execute a query that does not include the specified aggregate function”。我认为您只需要将 [Open Amount]
添加到最后的 GROUP BY
.
.
.
GROUP BY [doc type],[customer number],[Open Amount]
HAVING COUNT([customer number]) = 1
???
,您选择了三个不属于任何聚合的元素,而在 group by 中只有两个元素,这就是您收到错误消息的原因。
当你使用聚合函数时,select 的所有非聚合元素都需要在 group by 中,因此你的查询变成这样:
编辑:您正在选择 [未结金额] 并在您的子查询中聚合 SUM(agg.[Open Amount]) AS SumOpenAmount。
您也在外部查询中做类似的事情
SELECT [doc type],[Open Amount],COUNT([customer number]) As CountCustomerNumber,SUM(IIF([Open Amount]>'0',0)) AS sum_open_amount_pos,SUM(IIF([Open Amount]<'0',0)) As sum_open_amount_neg
FROM SubQueries
GROUP BY [doc type]
[Open Amount],[customer number]
HAVING COUNT([customer number]) = 1
应该是这样的:
SELECT [doc type],0)) As sum_open_amount_neg
FROM SubQueries
GROUP BY [doc type],[customer number]
HAVING COUNT([customer number]) = 1
,
当您求和 [Open Amount]
时,您不能同时选择每个单独的“未结金额”。因此,将其从“SELECT”和“GROUP BY”中删除:
SELECT [doc type] --,[customer number]
--,0)) As sum_open_amount_neg
FROM
-- snip
GROUP BY [doc type],[customer number]
--,[Open Amount]
-- snip
同样,如果您按“客户编号”分组,Count([Customer Number])
将返回 1(如果有效)。