首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL结果排序中的环绕

SQL结果排序中的环绕
EN

Stack Overflow用户
提问于 2010-11-25 00:36:23
回答 3查看 603关注 0票数 1

如果我有一个表,其中的项以C、D和J开头,是否可以通过某种方式安排一个查询,使这些项按升序排列,但以D开头,以C结束?

例如,原始表= C,D,D,J期望结果顺序= D,D,J,C,C,C

在普通的SQL中,这不是任何函数式语言吗?我不明白如何在没有硬编码的情况下实现所需的顺序,即以所需的顺序选择每个单独的记录并将其合并在一起。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-25 00:40:01

这看起来不像是常规的订单,所以你不能用一种简单的方式来完成它。但是你可以这样做:

代码语言:javascript
复制
(SELECT * FROM yourtable WHERE ID >=C ORDER BY ID) UNION (SELECT SELECT * FROM yourtable WHERE ID <C ORDER BY ID)
票数 1
EN

Stack Overflow用户

发布于 2010-11-25 00:41:10

您可以使用CASE语句引入自定义排序键。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2010-11-25 01:10:28

您可以通过使用表实现自定义排序顺序,而无需进行硬编码:

代码语言:javascript
复制
CREATE TABLE SortRules (
    Prefix char(1) NOT NULL
    ,SortOrder int NOT NULL
)

然后连接到SortRules表:

代码语言:javascript
复制
SELECT *
FROM YourTable
LEFT JOIN SortRules
    ON YourTable.YourColumn LIKE SortRules.Prefix + '%'
ORDER BY SortRules.SortOrder, YourTable.YourColumn

您可以使SortOrder成为唯一的(尽管这不是必需的)。您还可以决定是否希望缺少的元素(在联接中不匹配)位于顶部或底部:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4269158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档