2011-01-06 159 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 

这是我用最后的查询。谢谢你们帮助我并向我解释。