sql降序按字母顺序排列在案例中(firebird)

时间:2014-02-20 21:54:42

标签: sql case firebird alphabetical

这需要在使用FlameRobin的Firebird中完成

我的问题非常简单,但我仍然需要帮助

Select * from Clients

order by Case town

when 'amsterdam' Then 1
when 'rotterdam' Then 2
when 'maastricht' Then 3
else 4 end,
Case Gender 
when null then 1
when 'Male' then 2
when 'Female' then 3
else 4 end,

---从这里出错我想要的东西 -

Case name
when null then 1
when asc then 2    ( and here I want the names alphabetical descending )
else 3 end 

因为sql是如此有限,我需要一些帮助

1 个答案:

答案 0 :(得分:0)

我认为您最好在您的选择中构建这些计算字段,然后使用它们进行排序,如下所示:

SELECT *,
    (CASE town
        WHEN 'amsterdam' THEN 1
        WHEN 'rotterdam' THEN 2
        WHEN 'maastricht' THEN 3
        ELSE 4
    END CASE) as town_order,
    CASE gender
        WHEN ...
        ...
        ELSE 4
    END CASE) as gender_order,
    CASE gender
        WHEN ...
        ...
        ELSE 3
    END CASE) as name_order
ORDER BY town_order ASC, gender_order ASC, name_order ASC, name DESC

当然这将是一个非常非最佳的查询,无法使用任何类型的索引进行排序。如果您确实想要高效查询,则应该在表格中添加特定的town_ordergender_order等字段,并在其上放置索引。