簡體   English   中英

任何人都可以幫我寫sql語句嗎?

[英]Can anyone help me to write sql statement?

任何人都可以幫我寫下面的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語句來獲取上面的格式。 誰能告訴我怎么寫呢?

預先感謝。

怎么樣的

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 Fiddle DEMO

這將確保即使任何優先級大於其他優先級的最大值,這仍將排在最后0。

你應該使用case表達式如下

select No,Title,Date,Priority
from tab
order by 
  case
     when Priority=0 then 9999
     else Priority
  end,
  Date desc 

你可以嘗試類似的東西: -

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;
select no,title,date,priority
from tbl_request
order by if(priority=0,99999,priority),date desc

這假設沒有優先級超過99999.喲還需要在no和date列周圍找回引號 - 我沒有在這個鍵盤上有它們!

如果您沒有顯示0優先級記錄,那么下面的SQL語句就可以了。

SELECT * FROM tbl_request WHERE Priority <> 0 ORDER BY Priority ASC, Date DESC 
Select * from tbl_request 
Order by ( CASE WHEN Priority > 0 THEN Priority ELSE 99999999 END ), DATE DESC

你可以試試:

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
SELECT *
FROM Table1
ORDER BY 
  (CASE WHEN Priority = 0 THEN  9999 ELSE 1 END)  asc, date desc
SELECT *
FROM Table1
ORDER BY field(`Priority`,0),`Priority`,
  `Date` DESC

小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM