2011-01-06 70 views
0

我需要做的是從課堂,實驗室,演講廳,禮堂和禮堂中排序。然後我需要做的是按照他們的ID來安排他們。所以對於教室,我從1開始上升。在ORDER BY CASE中使用ASC/DESC()

我使用的唯一字段是roomID和類型列。 (應該改變類型看它是怎麼樣的一個SQL函數吧?)

SELECT * 
    FROM `rooms` 
ORDER BY CASE WHEN `type` = 'Classroom' 
    THEN 1 
    WHEN `type` = 'Computer laboratory' 
    THEN 2 
    WHEN `type` = 'Lecture Hall' 
    THEN 3 
    WHEN `type` = 'Auditorium' 
    THEN 4 
    END 

看起來很簡單,但我不能得到它的工作。所以,任何幫助將不勝感激,特別是因爲這可能是一個愚蠢的問題。

回答

2

看起來你應該做的是把這個case語句放到你的查詢字段中並給它一個別名。然後通過聲明設置您的訂單以使用該別名。

SELECT *, 
CASE 
WHEN type = 'Classroom' THEN 1 
WHEN type = 'Computer laboratory' THEN 2 
WHEN type = 'Lecture Hall' THEN 3 
WHEN type = 'Auditorium' THEN 4 
END AS ClassTypeValue 
FROM rooms 
ORDER BY ClassTypeValue 

如果我沒記錯,這應該工作。

+0

+1 @spinon你可能是對的,但我懷疑這不適用於不同的dB。例如一些你的需求和一些地方賽義德阿卜杜勒拉赫曼的是 – 2011-01-06 17:18:51

+0

它的工作!最後一行應該是ORDER BY roomID,但是謝謝。所以如果我需要通過ASC或DESC來訂購任何東西,我必須首先對其他CASE進行「分組」。 – 2011-01-06 17:18:59

1

萬一自旋子的回答不會爲你工作總是可以讓一個在線視圖

SELECT * 
FROM 
(

    SELECT *, 
     CASE 
     WHEN type = 'Classroom' THEN 1 
     WHEN type = 'Computer laboratory' THEN 2 
     WHEN type = 'Lecture Hall' THEN 3 
     WHEN type = 'Auditorium' THEN 4 
     END AS ClassTypeValue 
    FROM rooms 
) t 
ORDER BY ClassTypeValue 
0
SELECT * 
FROM 
    (
    SELECT *, 
     CASE 
     WHEN type = 'Classroom' THEN 1 
     WHEN type = 'Computer laboratory' THEN 2 
     WHEN type = 'Lecture Hall' THEN 3 
     WHEN type = 'Auditorium' THEN 4 
     END AS ClassTypeValue 
    FROM rooms 
    ) t 
ORDER BY ClassTypeValue, maxppl, roomID 

這是我用最後的查詢。謝謝你們幫助我並向我解釋。