cag*_*gin 63 sql-server sql-order-by
我正在使用SQL Server 2005.
我的查询是:
SELECT (
SELECT COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
GROUP BY refKlinik_id
ORDER BY refKlinik_id
) as dorduncuay
Run Code Online (Sandbox Code Playgroud)
而错误:
除非还指定了TOP或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效.
如何ORDER BY在子查询中使用?
Tom*_*lak 103
这是你得到的错误(强调我的):
除非还指定了TOP或FOR XML,否则 ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效.
那么,你怎么能避免这个错误呢?通过指定TOP,我想是一种可能性.
SELECT (
SELECT TOP 100 PERCENT
COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
GROUP BY refKlinik_id
ORDER BY refKlinik_id
) as dorduncuay
Run Code Online (Sandbox Code Playgroud)
Pat*_*olf 33
除了订单在您的查询中似乎没有意义的事实....要在子选择中使用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
Run Code Online (Sandbox Code Playgroud)
我的理解是"TOP 100 PERCENT"不再保证从SQL 2005开始订购:
在SQL Server 2005中,视图定义中的ORDER BY子句仅用于确定TOP子句返回的行.查询视图时,ORDER BY子句不保证有序结果,除非在查询本身中也指定了ORDER BY.
希望这有帮助,帕特里克
Jez*_*Jez 21
如果您正在使用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
Run Code Online (Sandbox Code Playgroud)
如果构建临时表,请将 ORDER BY 子句从临时表代码块内部移到外部。
不允许:
SELECT * FROM (
SELECT A FROM Y
ORDER BY Y.A
) X;
Run Code Online (Sandbox Code Playgroud)
允许:
SELECT * FROM (
SELECT A FROM Y
) X
ORDER BY X.A;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164305 次 |
| 最近记录: |