如果我有一个表,其中的项以C、D和J开头,是否可以通过某种方式安排一个查询,使这些项按升序排列,但以D开头,以C结束?
例如,原始表= C,D,D,J期望结果顺序= D,D,J,C,C,C
在普通的SQL中,这不是任何函数式语言吗?我不明白如何在没有硬编码的情况下实现所需的顺序,即以所需的顺序选择每个单独的记录并将其合并在一起。
发布于 2010-11-25 00:40:01
这看起来不像是常规的订单,所以你不能用一种简单的方式来完成它。但是你可以这样做:
(SELECT * FROM yourtable WHERE ID >=C ORDER BY ID) UNION (SELECT SELECT * FROM yourtable WHERE ID <C ORDER BY ID)发布于 2010-11-25 00:41:10
您可以使用CASE语句引入自定义排序键。
Select Col1, Col2, Col3,
case left(Col3,1) when 'D' then 1
when 'J' then 2
when 'C' then 3
else 4
end as SortKey
from YourTable
order by SortKey, Col3发布于 2010-11-25 01:10:28
您可以通过使用表实现自定义排序顺序,而无需进行硬编码:
CREATE TABLE SortRules (
Prefix char(1) NOT NULL
,SortOrder int NOT NULL
)然后连接到SortRules表:
SELECT *
FROM YourTable
LEFT JOIN SortRules
ON YourTable.YourColumn LIKE SortRules.Prefix + '%'
ORDER BY SortRules.SortOrder, YourTable.YourColumn您可以使SortOrder成为唯一的(尽管这不是必需的)。您还可以决定是否希望缺少的元素(在联接中不匹配)位于顶部或底部:
SELECT *
FROM YourTable
LEFT JOIN SortRules
ON YourTable.YourColumn LIKE SortRules.Prefix + '%'
ORDER BY COALESCE(SortRules.SortOrder, 2147483647), YourTable.YourColumn
SELECT *
FROM YourTable
LEFT JOIN SortRules
ON YourTable.YourColumn LIKE SortRules.Prefix + '%'
ORDER BY COALESCE(SortRules.SortOrder, -2147483648), YourTable.YourColumnhttps://stackoverflow.com/questions/4269158
复制相似问题