22

我有一个 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...)
4

9 回答 9

66
Order By Case Edition
    When 'NE' Then 1
    When 'OE' Then 2
    When 'OP' Then 3
    Else 4 End 
于 2008-12-29T19:49:05.687 回答
7
SELECT 
  /*other fields*/
  CASE WHEN 'NE' THEN 1
    WHEN "OE" THEN 2
    WHEN "OP" THEN 3
    ELSE 4
END AS OrderBy
FROM
  /*Tables*/
WHERE
  /*conditions*/
ORDER BY
  OrderBy,
  /*other fields*/
于 2008-12-29T19:47:58.187 回答
5

将这些值添加到另一个带有数字列的表格中:

Edition  Rank
NE       1
OE       2
OP       3

加入表,并按 RANK 字段排序。

于 2008-12-29T19:47:12.757 回答
2

尝试:

select *
from MyTable
order by
case [FIELD] 
    when 'NE' then 1
    when 'OE' then 2
    when 'OP' then 3
    when '' then 4
    else 5
end
于 2008-12-29T19:52:21.140 回答
1
SELECT * FROM (

SELECT 1 as Rank, R.* FROM RETAIL R WHERE MTITLE LIKE 'somethi%' AND EDITION='NE'
   UNION ALL
SELECT 2 as Rank, R.* FROM RETAIL R WHERE MTITLE LIKE 'somethi%' AND EDITION='OE'
   UNION ALL
SELECT 3 as Rank, R.* FROM RETAIL R WHERE MTITLE LIKE 'somethi%' AND EDITION='OP'
   UNION ALL (etc...)

) ORDER BY 1
于 2019-01-14T10:20:11.760 回答
0

试试这个:

ORDER BY FIND_IN_SET(EDITION, 'NE,OE,OP,')
于 2008-12-29T19:52:57.240 回答
0
    CREATE TABLE #TMP
(
       ID INT IDENTITY(1,1),
       NAME VARCHAR(100),
)

INSERT INTO #TMP
SELECT 'ASHISH'
UNION ALL
SELECT 'CHANDAN'
UNION ALL
SELECT 'DILIP'
UNION ALL
SELECT 'ESHA'
UNION ALL
SELECT 'FIZA'
UNION ALL
SELECT 'MAHESH'
UNION ALL
SELECT 'VIPUL'
UNION ALL
SELECT 'ANIL'

-- I want to sort NAME column from value 'DILIP' then query will be as bellow

SELECT * FROM #TMP ORDER BY CASE WHEN NAME='DILIP' THEN '1' ELSE NAME END ASC

DROP TABLE #TMP
于 2015-12-02T09:44:06.750 回答
0

这个怎么样?

SELECT * 
FROM RETAIL
WHERE MTITLE LIKE 'somethi%'
ORDER BY POSITION(EDITION, ' OP OE NE') DESC

如果 substr 为空字符串,则结果为 1。如果未找到匹配项,则结果为 0。

位置()

在火鸟 2.1 中添加

参考: https ://firebirdsql.org/refdocs/langrefupd21-intfunc-position.html

于 2018-08-17T13:36:03.990 回答
0
SELECT (CASE WHEN 'NE' THEN 1
    WHEN "OE" THEN 2
    WHEN "OP" THEN 3
    ELSE 4) as orden,* FROM Retail WHERE MTITLE LIKE 'somethi%' 
     AND EDITION IN ('NE', 'OE', 'OP', '') ORDER BY Orden
于 2019-06-05T17:10:36.293 回答