首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >子查询中的Order By出现SQL错误

子查询中的Order By出现SQL错误
EN

Stack Overflow用户
提问于 2009-06-12 09:56:36
回答 14查看 219.3K关注 0票数 76

我正在使用SQL Server 2005。

我的问题是:

SELECT (
  SELECT COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id
) as dorduncuay

以及错误:

除非还指定了TOP或FOR XML,否则ORDER BY子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

如何在子查询中使用ORDER BY

EN

回答 14

Stack Overflow用户

发布于 2010-03-13 12:49:15

除了order by在您的查询中似乎没有意义之外……要在子选择中使用order by,您需要使用TOP 2147483647。

SELECT (
  SELECT TOP 2147483647
  COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id
) as dorduncuay

我的理解是,从SQL 2005开始,“前100 %”不再保证订购:

在SQL Server2005中,视图定义中的ORDER BY子句仅用于确定TOP子句返回的行。除非在查询本身中还指定了ORDER BY子句,否则ORDER BY子句不能保证在查询视图时得到有序结果。

请参阅SQL Server 2005 breaking changes

希望这能帮上忙,帕特里克

票数 37
EN

Stack Overflow用户

发布于 2017-05-19 17:38:50

如果您使用的是SQL Server 2012或更高版本,现在很容易修复此问题。添加offset 0 rows

SELECT (
  SELECT
  COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id OFFSET 0 ROWS
) as dorduncuay
票数 31
EN

Stack Overflow用户

发布于 2016-10-21 04:10:12

如果要生成临时表,请将ORDER BY子句从临时表代码块内部移到外部。

不允许使用

SELECT * FROM (
SELECT A FROM Y
ORDER BY Y.A
) X;

允许的

SELECT * FROM (
SELECT A FROM Y
) X
ORDER BY X.A;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/985921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档