SQL结果排序中的环绕

时间:2010-11-24 16:36:23

标签: sql

如果我有一个包含以C,D和J开头的项目的表,是否可以以任何方式安排一个查询来命令这些升序,但以D开头,并以C结束?

E.g。 raw table = C,C,C,D,D,J 期望的结果顺序= D,D,J,C,C,C

在普通的SQL中,这不是任何函数式语言吗?我看不出如何在没有硬编码的情况下实现所需的顺序,即按所需顺序选择所有联合的每个单独记录。

3 个答案:

答案 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