2016-12-07 62 views
2

我正在使用Microsoft SQL Server,发现自己处于困境中。我想基本上在订单上做订单。我现在使用的SQL查询是:使用Microsoft SQL Server获得列的10个最高递增值

SELECT top 10 labelid 
FROM mytable 
ORDER BY labelid DESC 

这将按降序返回labelid列的前10个值。然而,我想要查询前10个值,并且结果按升序排列。

有没有简单的方法做到这一点,而不使用程序/ plsql/etc?

+0

“plsql”是** Oracle **的程序化SQL代码语言 - 这不适用于SQL Server .... SQL Server等效它** T-SQL **(或Transact- SQL) –

回答

3

你只需要使用您的查询作为派生表:

SELECT * 
FROM (SELECT TOP 10 labelid 
     FROM mytable 
     ORDER BY labelid DESC) A 
ORDER BY labelid; 
+0

非常有趣!我不得不考虑更多派生表,因为我是SQL新手。谢谢! – Brad

+1

既然你是新手,我会注意到你不能在派生表中使用'order by',除非你也使用'top'。不确定你真的会这么做......许多SQL纯粹主义者会认为'top'实际上不是一个基于集合的方法。我认为他们会争辩说,即使'top'可能导致查询更快,使用'row_number()'也会更好。 – shawnt00

0
Select * from (
    SELECT top 10 labelid FROM mytable ORDER BY labelid DESC) order by labelid 
1

Lamak的解决方案是伟大的,派生表有很多的乐趣,但组织代码的一个非常有用的方式使用SQL Server时和其他有他们的平台是Common Table Expressions [CTE]而当你正在查找/学习也检查窗口函数,因为它们是有帮助的。

;WITH cte AS (
    SELECT 
     labelid 
     ,ROW_NUMBER() OVER (ORDER BY labelid DESC) as RowNum 
    FROM 
     mytable 
) 

SELECT * 
FROM 
    cte 
WHERE 
    RowNum <= 10 
ORDER BY 
    lableid