我想按以下顺序订购字符串的成绩。
K, 1, 2, 4, .... 12
但我一直得到5, 4, 3, ... 12, K, 1
sims_classroom中的成绩列是VARCHAR(255),表是latin1;
我已经尝试了书中的每一个演员和技巧。目前我通过向它添加0来获得以下技巧。我做错了什么?
SELECT
(SELECT district_get_name_function(sod.parent_id, sod.id)) AS 'district_name',
(SELECT school_get_name_function(so.id)) AS 'school_name',
st.teacher_username,
st.teacher_first_name,
st.teacher_last_name,
c.name as 'classroom_name',
c.grade,
c.id,
d.name AS 'discipline_name',
d.id AS 'discipline_id',
lc.name AS 'program_name',
lc.id AS 'program_id'
FROM sims_classroom c
.
.
.
ORDER BY
CASE lower(sort_direction) WHEN 'asc' THEN
CASE lower(sort_order)
WHEN 'grade' THEN
CASE c.grade
WHEN 'K' THEN 0
ELSE (c.grade + 0)
END
WHEN 'teachername' THEN lower(st.teacher_first_name)
ELSE c.name
END
END ASC,
CASE lower(sort_direction) WHEN 'desc' THEN
CASE lower(sort_order)
WHEN 'grade' THEN
CASE c.grade
WHEN 'K' THEN 10000
ELSE (c.grade + 0)
END
WHEN 'teachername' THEN lower(st.teacher_first_name)
ELSE c.name
END
END DESC
答案 0 :(得分:0)
您可以为成绩创建查找表。它将具有Grade_Name(即'K','1','2'等)和Grade_Order作为int。
你有这样的记录:
Grade_Name Grade_Order
K 1
1 2
2 3
3 4
等等。
然后,您可以将该查找表添加到JOIN和ORDER BY Grade_Order。
答案 1 :(得分:0)
我只能这样做。
WHEN 'grade' THEN
CASE c.grade
WHEN 'K' THEN '00'
WHEN '9' THEN '09'
WHEN '8' THEN '08'
WHEN '7' THEN '07'
WHEN '6' THEN '06'
WHEN '5' THEN '05'
WHEN '4' THEN '04'
WHEN '3' THEN '03'
WHEN '2' THEN '02'
WHEN '1-2' THEN '01'
WHEN '1' THEN '01'
ELSE c.grade
END