0

谁能帮我写下面的sql?

认为:

tbl_request

No       Title       Date           Priority
1        AAA         2013-08-06     3
2        BBB         2013-08-04     1
3        CCC         2013-08-05     0
4        DDD         2013-08-02     4
5        EEE         2013-08-01     2
6        FFF         2013-08-04     0
7        GGG         2013-08-03     5
8        HHH         2013-08-03     0

在 sql 语句中有两个优先顺序:

  • 第一优先级:按升序优先排序(仅 1、2、3、4、5)
  • 第二优先级:按日期降序排序

我想首先显示具有第一优先级的所有请求(0 不会显示)。在第一优先级之后,我想显示第二优先级。

这是我想要的:

No       Title       Date           Priority
2        BBB         2013-08-04     1
5        EEE         2013-08-01     2
1        AAA         2013-08-06     3
4        DDD         2013-08-02     4
7        GGG         2013-08-03     5
3        FFF         2013-08-05     0
6        GGG         2013-08-04     0
8        HHH         2013-08-03     0

我不知道如何编写 sql 语句来获取上述格式。谁能告诉我怎么写?

预先感谢。

4

9 回答 9

2

像这样的东西怎么样

SELECT *
FROM Table1
ORDER BY 
  CASE WHEN `Priority` != 0 THEN NULL ELSE 1 END,
  `Priority`,
  `Date` DESC

或者

SELECT *
FROM Table1
ORDER BY 
  CASE WHEN `Priority` != 0 THEN 0 ELSE 1 END,
  `Priority`,
  `Date` DESC

SQL 小提琴演示

这将确保即使任何优先级大于其他答案的最大值,这仍然会将 0 排序为最后。

于 2013-08-07T07:30:29.787 回答
0
SELECT *
FROM Table1
ORDER BY field(`Priority`,0),`Priority`,
  `Date` DESC

小提琴

于 2013-08-07T07:47:27.940 回答
0

您应该使用case如下表达式

select No,Title,Date,Priority
from tab
order by 
  case
     when Priority=0 then 9999
     else Priority
  end,
  Date desc 
于 2013-08-07T07:27:15.303 回答
0

您可以尝试以下方法:-

SELECT * FROM tbl_request
    WHERE Priority IN (1, 2, 3, 4, 5)
    ORDER BY Priority, DATE DESC
UNION
SELECT * FROM tbl_request
    WHERE Priority NOT IN (1, 2, 3, 4, 5)
    ORDER BY Date DESC;
于 2013-08-07T07:28:01.673 回答
0
select no,title,date,priority
from tbl_request
order by if(priority=0,99999,priority),date desc

这假设没有优先级超过 99999。哟还需要在 no 和 date 列周围加上引号 - 我在这个键盘上没有它们!

于 2013-08-07T07:28:25.133 回答
0

你可以试试:

Select title, date, priority from tbl_request Order By IF(priority = 0, 99999, priority) asc, date desc 

尽管它很丑陋,效率低下,但它对您有用。或者您可以考虑对子查询进行联合

Select title, date, priority from tbl_request where priority > 0 order by priority asc
union
Select title, date, priority from tbl_request where priority = 0 order by date desc
于 2013-08-07T07:38:50.650 回答
0

如果您不显示0优先级记录,那么下面的 SQL 语句就可以了。

SELECT * FROM tbl_request WHERE Priority <> 0 ORDER BY Priority ASC, Date DESC 
于 2013-08-07T07:29:58.127 回答
0
Select * from tbl_request 
Order by ( CASE WHEN Priority > 0 THEN Priority ELSE 99999999 END ), DATE DESC
于 2013-08-07T07:32:50.233 回答
0
SELECT *
FROM Table1
ORDER BY 
  (CASE WHEN Priority = 0 THEN  9999 ELSE 1 END)  asc, date desc
于 2013-08-07T07:42:41.613 回答