2012-02-06 74 views
0

内部查询我有一个查询:排序在SQL Server

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子句不起作用,因此我的排序结果不准确。

+4

你需要澄清“不起作用”。发布样本数据,实际产出和预期产出。 – JNK 2012-02-06 18:49:56

+0

您是否想要COLA订购的前10件产品,然后由COLB订购10件产品?您是否提前知道(即编写代码时)您希望如何过滤和排序数据,还是必须是动态的? – 2012-02-06 18:52:09

+0

您的查询如何在不使用“FROM”的情况下工作? – Lamak 2012-02-06 19:01:37

回答

1

尝试使用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 
+0

你试过这个吗?它应该做你在问什么。 – Alex 2012-02-07 04:17:36

1

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

1

嗯......如果以上没有工作没关系,我只是测试这一点:

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

它完美的作品。老实说,我不知道为什么你的查询不起作用(你没有这么说),但是这实现了完全相同的功能。