You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按未在SELECT子句中指定的列排序且不显示该列?

解决SQL按未选中列排序的报错问题

你遇到的报错是因为SQL严格模式要求:ORDER BY中引用的列必须包含在SELECT列表、聚合函数里,或者出现在GROUP BY子句中。以下是几种合法的实现方式,结合你的查询语句举例:

方法1:将排序列加入GROUP BY子句

如果要排序的列和当前GROUP BY的列逻辑关联(比如每个分组对应唯一的该列值),直接把它加到GROUP BY里,就能在ORDER BY中使用,不需要在SELECT里展示。

假设你要按Pt.ProjectID排序,修改后的查询如下:

select Pr.EmployeeNo as EmpNo, EmployeeFName as EmpFName, EmployeeLName as EmpLName,
ProjectName, ProjectStartDate as ProjStartDate, JobName as Job, JobRate, HoursWorked as Hours
from Employee as Em join ProjEmp as Pr on Em.EmployeeNo = Pr.EmployeeNo
                    join Project as Pt on Pr.ProjectID = Pt.ProjectID
                    join Job as Jb on Em.JobID = Jb.JobID
Group by Pr.EmployeeNo, EmployeeFName, EmployeeLName, ProjectName, ProjectStartDate, JobName, JobRate, HoursWorked, Pt.ProjectID
ORDER BY Pt.ProjectID

方法2:通过子查询/CTE间接引用排序列

先在子查询中包含需要的展示列和排序列,外层SELECT只提取要展示的内容,再按子查询里的排序列排序。

示例:

SELECT EmpNo, EmpFName, EmpLName, ProjectName, ProjStartDate, Job, JobRate, Hours
FROM (
    select Pr.EmployeeNo as EmpNo, EmployeeFName as EmpFName, EmployeeLName as EmpLName,
    ProjectName, ProjectStartDate as ProjStartDate, JobName as Job, JobRate, HoursWorked as Hours,
    Pt.ProjectID as SortCol
    from Employee as Em join ProjEmp as Pr on Em.EmployeeNo = Pr.EmployeeNo
                        join Project as Pt on Pr.ProjectID = Pt.ProjectID
                        join Job as Jb on Em.JobID = Jb.JobID
    Group by Pr.EmployeeNo, EmployeeFName, EmployeeLName, ProjectName, ProjectStartDate, JobName, JobRate, HoursWorked, Pt.ProjectID
) AS Temp
ORDER BY SortCol

方法3:用聚合函数包裹排序列

如果每个分组内要排序的列值是一致的,可用MAX()或MIN()这类聚合函数包裹它,这样无需加入GROUP BY就能在ORDER BY中使用,且不影响排序结果。

示例:

select Pr.EmployeeNo as EmpNo, EmployeeFName as EmpFName, EmployeeLName as EmpLName,
ProjectName, ProjectStartDate as ProjStartDate, JobName as Job, JobRate, HoursWorked as Hours
from Employee as Em join ProjEmp as Pr on Em.EmployeeNo = Pr.EmployeeNo
                    join Project as Pt on Pr.ProjectID = Pt.ProjectID
                    join Job as Jb on Em.JobID = Jb.JobID
Group by Pr.EmployeeNo, EmployeeFName, EmployeeLName, ProjectName, ProjectStartDate, JobName, JobRate, HoursWorked
ORDER BY MAX(Pt.ProjectID)

内容的提问来源于stack exchange,提问作者Arthwys Ironhand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:56