在ORDER BY CASE中使用ASC/DESC()
问题描述:
我需要做的是从课堂,实验室,演讲厅,礼堂和礼堂中排序。然后我需要做的是按照他们的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
看起来很简单,但我不能得到它的工作。所以,任何帮助将不胜感激,特别是因为这可能是一个愚蠢的问题。
答
看起来你应该做的是把这个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
如果我没记错,这应该工作。
答
万一自旋子的回答不会为你工作总是可以让一个在线视图
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
答
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
这是我用最后的查询。谢谢你们帮助我并向我解释。
+1 @spinon你可能是对的,但我怀疑这不适用于不同的dB。例如一些你的需求和一些地方赛义德阿卜杜勒拉赫曼的是 – 2011-01-06 17:18:51
它的工作!最后一行应该是ORDER BY roomID,但是谢谢。所以如果我需要通过ASC或DESC来订购任何东西,我必须首先对其他CASE进行“分组”。 – 2011-01-06 17:18:59