我有一個SQL查詢的結果,我想按字母順序排序,但有一些常用的結果,我想漂浮在頂部。 有沒有一種簡單的方法,我可以通過做聰明的SQL或通過排序(asp.net)數據表一旦我有它填充?如何排序SQL結果但保留一些特殊的結果?
我知道我想保留在頂端的事情的數據庫ID,如果這有所作爲。
我有一個SQL查詢的結果,我想按字母順序排序,但有一些常用的結果,我想漂浮在頂部。 有沒有一種簡單的方法,我可以通過做聰明的SQL或通過排序(asp.net)數據表一旦我有它填充?如何排序SQL結果但保留一些特殊的結果?
我知道我想保留在頂端的事情的數據庫ID,如果這有所作爲。
做到這一點,最簡單的方法是通過一些設置這些字段除了其他排序...
在假設你有機會修改表的結構(您可能不),然後添加一個「粘性」字段,它允許您將項目標記爲粘性,並且如果您喜歡,可將訂單附加到粘性物品上。常規排序之前按此字段進行排序。
至於如何在沒有定義字段的情況下做到這一點 - 您需要按照您在這些字段中找到的某些數據進行排序,或將ID保留在單獨的表中 - 或者查詢中的列表...不是最理想的方式,但它會奏效。
您可以添加一個名爲'Special'的加法字段。特殊表不一定實際存在於表中,但是您可以派生出您認爲合適的查詢。然後排序如下:
ORDER BY Special DESC, Name ASC
當然,這假定您的非特殊的行會是0,字母字段稱爲「名稱」
你可以定義設置了一個「特殊的自定義列標誌「,你可以排序。然後,按字母順序排列。
SELECT ...
IsSpecial = CASE WHEN RowID IN (100,534,203) THEN 1 ELSE 0 END
FROM ...
ORDER BY IsSpecial DESC, RowID ASC, Name ASC
要添加到@EndangeredMassa:
你也可以做同樣的事情,如果你已經在做工會:
SELECT 0 QueryType, Desc, GrandTotal
FROM YourTable
UNION ALL
SELECT 1 QueryType, Desc, LineItems
FROM YourTable
ORDER BY QueryType, Desc
注:工會可能不會在這個例子中理想......它只是一個例!
公正的秩序由使用的任何規則你指定一個case語句......
...
Order By Case
When [My Rules that designate special]
Then 0 Else 1 End
+1使這一數據驅動而不是流程驅動 – 2008-12-19 17:37:28
同意 - 在那裏有一列維持這種狀態清晰。另一方面,如果你這樣做來產生一個總計或一些計算的統計數據,其他答案可以提供幫助。或者,如果您使用的是臨時表格,那麼這個答案也能正常工作 – 2008-12-19 17:41:33
我非常喜歡這個想法,尤其是「粘性」項目內的排序。您可以使用一列,IE StickyOrder,並將粘性項目設置爲1,2或3,並將「非粘性」項目設置爲值200或其他值。那麼你只需要一個由StickyOrder ASC命令,名稱ASC – 2008-12-19 17:52:43