0

文字列であるグレードを次の順序で注文したい。

K, 1, 2, 4, .... 12

しかし、私は取得し続けます5, 4, 3, ... 12, K, 1

sims_classroomのgrade列は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
4

2 に答える 2

0

成績のルックアップテーブルを作成できます。これには、Grade_Name(つまり、「K」、「1」、「2」など)とGrade_Orderがintとして含まれます。

次のようなレコードがあります。

Grade_Name    Grade_Order
K             1
1             2
2             3
3             4

等々。

次に、そのルックアップテーブルをJOINおよびORDERBYGrade_Orderに追加できます。

于 2012-06-15T22:17:18.167 に答える
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
于 2012-06-18T20:45:16.283 に答える