我如何按特定订单订购?

时间:2016-07-30 19:51:21

标签: sql oracle

这将是:

SELECT * FROM users ORDER BY id ORDER("abc","ghk","pqr"...);

在我的订单条款中,可能有1000条记录,而且都是动态的。

快速谷歌搜索给了我以下结果:

SELECT * FROM users ORDER BY case id 
 when "abc" then 1
 when "ghk" then 2
 when "pqr" then 3 end;

正如我所说的所有订单子句值都是动态的。那么对我有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您的示例并不完全清楚,因为看起来简单的ORDER BY就足以按字母顺序排列您的ID。但是,您似乎正在尝试创建可能不按字母顺序排列的动态排序方案。在这种情况下,我的建议是使用查找表来查找您将要排序的值。这有两个目的:首先,它允许您轻松地重新排序项目而不更改users表中的每个条目,其次,它避免(或至少减少)拼写错误和其他可能发生的问题#34;魔术弦。"

这看起来像是:

查找表:

CREATE TABLE LookupValues (
    Id CHAR(3) PRIMARY KEY,
    Order INT
);

<强>查询:

SELECT
    u.*
FROM
    users u
    INNER JOIN
    LookupTable l
    ON
        u.Id = l.Id
ORDER BY
    l.Order