我有表3列AB C.如何做到這一點的查詢在T-SQL
我想選擇*從該表中,但A列
的特定順序在其他有序單詞,讓'說列A包含「堆棧」,「超過」,「流量」。
我想從這張表中選擇*,並按列A的順序排列:「stack」,「flow」,「over」 - 既不是升序也不是降序。
可能嗎?
我有表3列AB C.如何做到這一點的查詢在T-SQL
我想選擇*從該表中,但A列
的特定順序在其他有序單詞,讓'說列A包含「堆棧」,「超過」,「流量」。
我想從這張表中選擇*,並按列A的順序排列:「stack」,「flow」,「over」 - 既不是升序也不是降序。
可能嗎?
您可以在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瞭解更多詳情。
一對夫婦的解決方案:
與排序順序創建一個表,列上的一個連接到新表(這會是這樣的TERM字符串,排序順序爲INT)。因爲事情總是在變化,所以這避免了硬編碼任何東西,並且是我推薦的真實世界使用的解決方案。
如果你不想加入新的條款和訂單的靈活性,只需使用一個CASE語句每個詞變成一個數:
CASE A WHEN 'stack' THEN 1 WHEN 'over' THEN 2 WHEN 'flow' THEN 3 END
,並在你的ORDER BY使用它。
如果您有很多自定義排序的元素,您可以將這些元素添加到表中併爲其賦值。加入表格,每列可以有自定義的訂單價值。
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
使用的情況下,