如何按结果集外的列排序?子查询ORDER BY报错求助
解决SQL子查询排序报错的方法
问题原因
你遇到的错误是因为SQL规范中,子查询、派生表这类内部查询里的ORDER BY子句,只有搭配TOP、OFFSET或FOR XML时才生效——数据库引擎默认认为这类内部查询返回的是无序数据集,单独的ORDER BY在这里没有实际意义。
最优解决方案
不需要嵌套子查询,直接在外部查询中指定排序字段即可,既满足按zip_code排序又不显示该列:
SELECT city, state FROM sales.customers ORDER BY zip_code
若需保留子查询结构的替代方案
如果因为某些场景必须用子查询,可通过添加OFFSET 0 ROWS或TOP 100 PERCENT来让内部的ORDER BY生效:
- 使用
OFFSET语法:
SELECT city, state FROM ( SELECT * FROM sales.customers ORDER BY zip_code OFFSET 0 ROWS ) t
- 使用
TOP语法:
SELECT city, state FROM ( SELECT TOP 100 PERCENT * FROM sales.customers ORDER BY zip_code ) t
注意
优先推荐第一种直接在外部排序的写法,它更简洁且性能更优,子查询嵌套只会增加不必要的执行复杂度。
内容的提问来源于stack exchange,提问作者Nikhil Govula
相关产品推荐
相关产品推荐

