2016-12-07 97 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