2014-03-25 27 views
2

我有一個查詢返回2列的不同記錄,但我需要排序這些2列和1個附加列的結果。 當我嘗試下面的SQL時,顯示錯誤。MSSQL選擇獨特和排序

SQL:

SELECT DISTINCT vers, revs FROM tblMVer 
WHERE mid = 194 ORDER BY date_deployed DESC, vers DESC, revs DESC 

錯誤:

ORDER BY items must appear in the select list if SELECT DISTINCT is specified. 

就如何實現這一目標,請任何想法。

感謝

千電子伏

+0

加入select語句date_deployed或者從訂單刪除。 –

回答

2

您水溼按日期,只是因爲它們是不同的,我猜。 但是,如果你將採取最後日期,你可以這樣做:

SELECT vers, revs 
FROM (
    SELECT MAX(date_deployed) AS d, vers, revs 
    FROM tblMVer 
    WHERE mid = 194 
    GROUP BY vers, revs 
    ORDER BY d DESC, vers DESC, revs DESC 
) AS temp 
1

沒有date_deployed在選擇

試試這個

SELECT DISTINCT vers, revs 
FROM tblMVer 
WHERE mid = 194 
ORDER BY vers,revs DESC 

,但還是要通過date_deployed

訂購試試這個

SELECT vers, revs 
FROM 
(
    SELECT DISTINCT vers, revs,date_deployed 
    FROM tblMVer 
    WHERE mid = 194 
    ORDER BY vers,revs,date_deployed DESC 
) AS S 
+0

你必須在每一列放置一個'ORDER BY'關鍵字 - 你的版本會給出與原始文件不同的排序順序。 –

1

Order By子句只能包含那些正在被選中的字段,所以爲了使用date_deployed的順序,將它添加到select語句中。

1

無需如果所有列在相同的順序,如果這些都在不同的順序則需要指定

SELECT DISTINCT vers, revs FROM tblMVer 
WHERE mid = 194 ORDER BY vers , revs DESC 
+0

你必須在每一列放置一個'ORDER BY'關鍵字 - 你的版本會給出與原始文件不同的排序順序。 –

0

執行以下查詢,讓您的結果

SELECT DISTINCT tblMVer.vers, 
tblMVer.revs 
FROM tblMVer 
WHERE mid = 194 
ORDER BY tblMVer.date_deployed DESC, 
tblMVer.vers DESC, 
tblMVer.revs DESC 
+0

恩,這在功能上與他最初的查詢完全相同,這顯然不起作用。是什麼讓你認爲僅僅限定表(這在單表引用查詢中是不必要的)將使他的查詢工作? –