2016-08-22 61 views
-1

我有一個包含兩列的表。其中一列包含文本,另一列包含整數值。sql order by logic

我需要這個表按整數值排序(較高的值到頂部),但如果整數值等於0,那麼我需要該行按字母順序排列。比方說,我有這個表

TextCol|IntCol| 
-------|------| 
Delta | 0 | 
Alpha | 0 | 
Beta | 3 | 
Sierra | 2 | 
Gama | 1 | 

現在我需要這樣的:

TextCol|IntCol| 
-------|------| 
Beta | 3 | 
Sierra | 2 | 
Gama | 1 | 
Alpha | 0 | 
Delta | 0 | 

什麼是這種情況的SQL查詢?

+3

請出示你真實目的是試圖解決查詢您的問題。 – DanFromGermany

+1

SELECT * FROM test ORDER BY age DESC,name ASC; where test-> tablename,age-> numeric;名稱 - >文本 –

回答

4

可以使用採用如下方案的CASE WHEN

SELECT * FROM table 
ORDER BY intColumn DESC, 
     CASE WHEN intColumn = 0 THEN stringColumn END ASC 

在這裏你可以找到一個例子:http://sqlfiddle.com/#!9/a982a/1

+1

謝謝塞巴斯蒂安這個工程。 – user6650650

+0

您有使用CASE語句的原因嗎? Kool-Mind對這個問題的評論看起來很有效。先按數字順序,然後命名。這樣,它也將按名稱與數字組織,而不僅僅是0. – CodyMR

+0

我試過這個,它工作得很好。我的訂購優先級是數字。從高到低。但是如果數字是0,它應該開始按字母順序排列。 Sebastians查詢做得很好。 – user6650650

2

嘗試:

  • ISNULL(IntCol,0)說明:給你由較高值的整數值到較低的值。如果有任何值爲null,那麼它將轉換爲「0」
  • TextCol:它將按照升序值排序文本列。

    SELECT * FROM TableName ORDER BY ISNULL(IntCol,0) DESC, TextCol