2009-08-28 57 views
2

我有表3列AB C.如何做到這一點的查詢在T-SQL

我想選擇*從該表中,但A列

的特定順序在其他有序單詞,讓'說列A包含「堆棧」,「超過」,「流量」。

我想從這張表中選擇*,並按列A的順序排列:「stack」,「flow」,「over」 - 既不是升序也不是降序。

可能嗎?

回答

10

您可以在ORDER BY子句中使用CASE語句。例如...

SELECT * 
FROM Table 
ORDER BY 
    CASE A 
     WHEN 'stack' THEN 1 
     WHEN 'over' THEN 2 
     WHEN 'flow' THEN 3 
     ELSE NULL 
    END 

查看Defining a Custom Sort Order瞭解更多詳情。

1

一對夫婦的解決方案:

與排序順序創建一個表,列上的一個連接到新表(這會是這樣的TERM字符串,排序順序爲INT)。因爲事情總是在變化,所以這避免了硬編碼任何東西,並且是我推薦的真實世界使用的解決方案。

如果你不想加入新的條款和訂單的靈活性,只需使用一個CASE語句每個詞變成一個數:

CASE A WHEN 'stack' THEN 1 WHEN 'over' THEN 2 WHEN 'flow' THEN 3 END 

,並在你的ORDER BY使用它。

0

如果您有很多自定義排序的元素,您可以將這些元素添加到表中併爲其賦值。加入表格,每列可以有自定義的訂單價值。

select 
     main.a, 
     main.b, 
     main.c 
    from dbo.tblMain main 
    left join tblOrder rank on rank.a = main.a 
    order by rank.OrderValue 

如果你只有3個單元,如你的問題建議,你可以在ORDER BY ...

select 
     * 
    from dbo.tblMain 
    order by case 
     when a='stack' then 1 
     when a='flow' then 2 
     when a='over' then 3 
     else 4 
    end 
使用的情況下,