【发布时间】:2010-09-28 17:56:35
【问题描述】:
我有一个 sql 查询(使用 Firebird 作为 RDBMS),我需要在其中按字段 EDITION 对结果进行排序。但是,我需要按字段的内容排序。即“NE”排在第一位,“OE”排在第二位,“OP”排在第三位,空白排在最后。不幸的是,我不知道如何实现这一点。我所做的只是 ORDER BY [FIELD] ASC/DESC,仅此而已。
有什么建议吗?
编辑:我真的应该澄清一下:我只是希望在这里了解更多信息。我现在有了它,我只有多个选择语句来定义首先显示哪个。查询相当大,我真的希望学习一种更有效的方法: 示例:
SELECT * FROM RETAIL WHERE MTITLE LIKE 'somethi%' AND EDITION='NE'
UNION
SELECT * FROM RETAIL WHERE MTITLE LIKE 'somethi%' AND EDITION='OE'
UNION
SELECT * FROM RETAIL WHERE MTITLE LIKE 'somethi%' AND EDITION='OP'
UNION (etc...)
【问题讨论】:
-
建议的解决方案都不需要多重选择/联合。它们都应该更快、更容易维护,查询也更容易阅读。
-
我要和 Peter LaComb 一起做这个。你为什么使用UNION?没有必要我会选择 SELECT * FROM Retail WHERE MTITLE LIKE 'somethi%' AND EDITION IN ('NE', 'OE', 'OP', '') ORDER BY CASE EDITION When 'NE' Then 1 When 'OE' Then 2 When 'OP' Then 3 Else 4 End
-
@Pulsehead 你可以在这个 StackOverflow 问题中找到为什么我会在某个地方使用联合的答案,关于不知道排序字段的最佳方式。