我正在使用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
?
发布于 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
希望这能帮上忙,帕特里克
发布于 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
发布于 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;
https://stackoverflow.com/questions/985921
复制相似问题