如果我有一个包含以C,D和J开头的项目的表,是否可以以任何方式安排一个查询来命令这些升序,但以D开头,并以C结束?
E.g。 raw table = C,C,C,D,D,J 期望的结果顺序= D,D,J,C,C,C
在普通的SQL中,这不是任何函数式语言吗?我看不出如何在没有硬编码的情况下实现所需的顺序,即按所需顺序选择所有联合的每个单独记录。
答案 0 :(得分:3)
您可以使用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
答案 1 :(得分:1)
这似乎不是常规订单,因此您无法以简单的方式执行此操作。但你可以这样做:
(SELECT * FROM yourtable WHERE ID >=C ORDER BY ID) UNION (SELECT SELECT * FROM yourtable WHERE ID <C ORDER BY ID)
答案 2 :(得分:1)
您可以使用表格实现自定义排序顺序而无需硬编码:
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.YourColumn