0

次の SQL は、以下の結果の表を生成します。

select ks2en, 
    count(case result when 'C-' then 1 end) as 'C-',
    count(case result when 'C' then 1 end) as 'C',
   count(case result when 'C+' then 1 end) as 'C+',
   count(case result when 'B' then 1 end) as 'B',
   count(case result when 'A' then 1 end) as 'A'
from student join subject 
on subject.upn=student.upn 
where name='English'
group by ks2en;

私が知りたいのは、各行の順序を指定できることです。現在、次のように読み取られます。

ks2en   C-  C   C+  B   A
        0   3   0   0   0
2a      0   0   0   0   0
3a      18  0   0   0   0
3b      0   0   0   0   0
3c      0   0   0   0   0
4a      3   11  1   1   0
4b      3   3   36  0   0
4c      1   26  0   0   0
5b      0   3   0   1   0
5c      3   12  4   33  0

以下のように読んでいただきたいです。

ks2en   C-  C   C+  B   A
        0   3   0   0   0
2a      0   0   0   0   0
3c      0   0   0   0   0
3b      0   0   0   0   0
3a      18  0   0   0   0
4c      1   26  0   0   0
4b      3   3   36  0   0
4a      3   11  1   1   0
5c      3   12  4   33  0
5b      0   3   0   1   0

もう 1 つの注意点は、結果に応じて、KS2en 列に次の可能性のある他の値が含まれる場合があることです。

ks2en   

W
1c
1b
1a
2c
2b
2a      
3c      
3b      
3a      
4c      
4b      
4a      
5c      
5b      
5a
6c
6b
6a
4

1 に答える 1

1

ハッキーな方法(データベースが提供する部分文字列関数を使用します):

select 
    ks2en, 
    count(case result when 'C-' then 1 end) as 'C-',
    count(case result when 'C' then 1 end) as 'C',
    count(case result when 'C+' then 1 end) as 'C+',
    count(case result when 'B' then 1 end) as 'B',
    count(case result when 'A' then 1 end) as 'A'
from
    student 
        join 
    subject 
        on subject.upn = student.upn 
where 
    name='English'
group by 
    ks2en
order by
    case when ks2en = 'W' Then 0 Else 1 End,
    left(ks2en, 1),
    right(ks2en, 1) desc

データベースの方法では、列を使用してテーブルを作成 (または既存のテーブルに列を追加) しks2en, sequenceno、それを ks2enSeq と呼びます。希望する順序で昇順のシーケンス番号を使用して、ks2en のすべての値の行を作成します。

select 
    ks2en, 
    count(case result when 'C-' then 1 end) as 'C-',
    count(case result when 'C' then 1 end) as 'C',
    count(case result when 'C+' then 1 end) as 'C+',
    count(case result when 'B' then 1 end) as 'B',
    count(case result when 'A' then 1 end) as 'A'
from
    student 
        join 
    subject 
        on subject.upn = student.upn 
        inner join
    ks2enSeq k
        on k.ks2en = subject.ks2en
where 
    name='English'
group by 
    subject.ks2en
order by
    k.sequenceno
于 2013-09-20T19:40:15.803 に答える