2014-09-26 106 views
0

與mySQL,我有一個表中有很多行的產品。每個產品都有名稱,庫存量和上次購買日期的列。我想要得到結果,其中所有存貨金額大於0的產品都按名稱排序(此組首先),然後所有存貨金額爲0的產品按上次購買進行排序。所以我不能使用UNION,因爲有兩個訂單定義。以下是一些用於更好理解的數據:SQL選擇同一個表,兩個不同的訂單

表數據:
名稱|股票|最後一次購買
-----------------------------
產品1 | 0 | 2014-09-20
產品2 | 10 | 2014-09-20
產品3 | 0 | 2014-09-26
產品4 | 10 | 2014-09-20
產品5 | 0 | 2013-08-18

需要結果:
產品2 | 10 | 2014-09-20
產品4 | 10 | 2014-09-20 ...這些股票超過零次序的名稱ASC
產品1 | 0 | 2014-09-26
產品3 | 0 | 2014-09-20
產品5 | 0 | 2013-08-18 ...這些與上次購買的空股票訂單DESC

因爲分頁,我需要它作爲一個結果。

回答

1

只需使用一個order by條款與多個條件:

order by (stock > 0) desc, 
     (case when stock > 0 then name end) asc, 
     (case when stock = 0 then lastpurchase end) desc; 
+0

工作!謝謝 :) – 2014-09-26 07:38:24

0

條件只需添加到您的ORDER BY

select * 
from data 
order by stock > 0 desc, 
    if(stock>0,name,null) asc, 
    if(stock>0,null,lastpurchase) desc 
相關問題