sqlserver中的内部查询排序

sqlserver中的内部查询排序,sql,sql-server,sorting,subquery,Sql,Sql Server,Sorting,Subquery,我有一个问题: SELECT * FROM (SELECT COLA, COLB, COLC, COLD, ROW_NUMBER() OVER(ORDER BY COLA) AS ROWNUMBER FROM TABLEXYZ)AS Tab1 WHERE ROWNUMBER BETWEEN 1 AND 10 ORDER BY COLA 如果必须

我有一个问题:

SELECT *
FROM   (SELECT COLA,
               COLB,
               COLC,
               COLD,
               ROW_NUMBER() OVER(ORDER BY COLA) AS ROWNUMBER
        FROM   TABLEXYZ)AS Tab1
WHERE  ROWNUMBER BETWEEN 1 AND 10
ORDER  BY COLA  
如果必须根据COLA对查询进行排序,则此查询可以正常工作,但如果尝试根据COLB、COLC等进行排序,则会出现问题。排序不起作用。
我想对内部表进行排序,但order by子句不起作用,因此我的排序结果不准确。

我认为排序也应该在查询的rownumber子句中进行。

我认为排序也应该在查询的rownumber子句中进行。

尝试使用TOP 100%

SELECT *
FROM   (SELECT TOP 100% COLA,
           COLB,
           COLC,
           COLD,
           ROW_NUMBER() OVER(ORDER BY COLA) AS ROWNUMBER
           FROM TABLEXYZ
           ORDER BY COLB ASC) AS Tab1
WHERE  ROWNUMBER BETWEEN 1 AND 10
ORDER  BY COLA  
试着使用100%的TOP

SELECT *
FROM   (SELECT TOP 100% COLA,
           COLB,
           COLC,
           COLD,
           ROW_NUMBER() OVER(ORDER BY COLA) AS ROWNUMBER
           FROM TABLEXYZ
           ORDER BY COLB ASC) AS Tab1
WHERE  ROWNUMBER BETWEEN 1 AND 10
ORDER  BY COLA  

嗯。。。如果上述方法不起作用,没关系,我只是测试了一下:

select * from(
select top 10 ROW_NUMBER() OVER(Order by ColumnA) as ROWN, ColumnA, ColumnB
from dbo.TableXYZ) as lala
order by ColumnB

它工作完美无瑕。老实说,我不知道为什么您的查询不起作用(您没有这样说),但这实现了完全相同的效果。

嗯。。。如果上述方法不起作用,没关系,我只是测试了一下:

select * from(
select top 10 ROW_NUMBER() OVER(Order by ColumnA) as ROWN, ColumnA, ColumnB
from dbo.TableXYZ) as lala
order by ColumnB

它工作完美无瑕。老实说,我不知道为什么您的查询不起作用(您没有这样说),但这实现了完全相同的效果。

您需要澄清“不起作用”。发布示例数据、实际输出和预期输出。您是否希望,比如,可乐公司订购的前10项产品,以及随后由可乐公司订购的10项产品?您是否提前知道(即在编写代码时)您希望数据如何过滤和排序,或者它必须是动态的?如果没有来自的
,您的查询如何工作?假设有100条记录,我们一次只显示其中的10条。现在,当我对外部查询执行一个between子句,然后对其进行排序时,它只会对作为外部查询结果集一部分的10条记录进行排序。对于正在排序的用户,它将是不正确的,因为内部查询排序不正确。@Lamak I修复了上面的原始查询。您需要澄清“不起作用”。发布示例数据、实际输出和预期输出。您是否希望,比如,可乐公司订购的前10项产品,以及随后由可乐公司订购的10项产品?您是否提前知道(即在编写代码时)您希望数据如何过滤和排序,或者它必须是动态的?如果没有来自
,您的查询如何工作?假设有100条记录,我们一次只显示其中的10条。现在,当我对外部查询执行一个between子句,然后对其进行排序时,它只会对作为外部查询结果集一部分的10条记录进行排序。对于正在排序的用户,它将不正确,因为内部查询排序不正确。@Lamak I修复了上面的原始查询。您尝试过这个吗?它应该满足你的要求。你试过这个吗?它应该满足你的要求。