sql - 添加导致 GROUP BY 错误的聚合列
问题描述
我正在向min(finumber)
我的查询中添加一个聚合列。添加此号码后,我希望能够在ORDER BY
. 当我删除min(finumber)
查询工作正常。当我添加min(finumber)
它给我的错误:
列 'soitem.fsono' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
我的问题是:我怎样才能将min(finumber)
它添加到ORDER BY
我的数据中?
SELECT A.fsono,
MAX(A.Attention) AS Attention,
MAX(A.Address1) AS Address1,
MAX(A.Address2) AS Address2,
A.fcustno,
A.fcontact,
A.min_fin
FROM (SELECT soitem.fsono,
somast.fcustno,
somast.fcontact,
min(finumber)as min_fin,
CASE
WHEN (CONVERT(varchar(MAX), soship.fmstreet)) LIKE 'ATTN%' THEN LEFT(CONVERT(varchar(MAX), soship.fmstreet), CHARINDEX(CHAR(10), CONVERT(varchar(MAX), soship.fmstreet)))
ELSE NULL
END AS Attention,
CASE WHEN [id] = 2 THEN S.val ELSE NULL END AS Address1,
CASE WHEN [id] = 3 THEN S.val ELSE NULL END AS Address2
FROM soitem
INNER JOIN somast ON soitem.fsono = somast.fsono
LEFT OUTER JOIN soship ON somast.fsono = soship.fcsono
AND soship.fcenumber = ''
CROSS APPLY [dbo].[split3](soship.fmstreet, CHAR(13) + CHAR(10)) S
WHERE (somast.fstatus <> 'Cancelled')
AND (somast.fsocoord = 'IFP'
OR somast.fsocoord = '711')
AND somast.fsono >= '034023') A
GROUP BY A.fsono,
A.fcustno,
A.fcontact
Order by A.fsono, A.min_fin
;
解决方案
错误在这里告诉你问题。
min(finumber)
在您的子查询中,而不是您的主查询中。您的子查询没有GROUP BY
,因此出现错误。你需要使用一个OVER
子句。但是,这是伪 SQL:
MIN(finumber) OVER (PARTITION BY {Partition Columns}) AS min_fin
我猜那些列会是soitem.fsono, somast.fcustno, somast.fcontact
.
推荐阅读
- html - 为什么rect不随svg的高度缩放
- python - 如何在 Python3 中使用 /n?
- python - 为什么 set object 有时会对值进行排序,有时只是忽略顺序并将其放在最后?
- windows - GitHub 通过 curl“解析 JSON 问题”创建存储库
- javascript - 如何为具有动态添加内容的花式框中的自定义按钮提供唯一的数据 ID
- angular - 指令不检测表单输入状态变化
- amazon-web-services - 有没有一种聪明的方法可以用相同的标签标记所有 AWS 资源?
- mlflow - 将 MLflow 实验记录到 DAGsHub 跟踪服务器
- ngrx - 错误 TS2322:类型 '{ auth: (state: auth.State | undefined, action: All) => auth.State; }' 不可分配给类型 'ActionReducer
'; - python - 如何在python中对2个列表的元素求和?