SQL 抽取學生成績SQL修改

本文由 ycf2022 在 2023-01-16 發表於 "WebSAMS 討論區" 討論區

  1. 57929684

    ycf2022
    Expand Collapse

    文章:
    4
    讚:
    0
    你好,我參考了常用SQL參考庫 Answer 9,曾自行修改,但並不成功。我想有以下修改,想請教一下可以如何修改。

    修改如下:
    1. 將全年科目成績,改為今年T1A1成績、今年T1A2成績...上年T1A1成績、上年T1A2成績...
    前年T2A2成績、前年T2A3成績。
    2. 不用顯示排名
    3. 最後一顯示同學的DSE成績。

    輸入為學年及科目代碼。期望的結果可以參考附件。有勞指教,謝謝。
     

    附件文件:

    #1 ycf2022, 2023-01-16
  2. 58521906

    edb-catherinewschan
    Expand Collapse

    文章:
    262
    讚:
    0
    你好

    在CDR找的SQL , 是接近你想要的效果, 當然要附加多些語句。

    可以參考以下的SQL , 已經寫了上年的T1A1分數, 請再增加 上年 和 前年的分數
    今年 是用 schyear , 上年 是用 schyear - 1 , 前年 是用 schyear - 2

    請參考藍色的部分。

    schyear
    今年T1A1 1101
    今年T1A2 1102
    今年T1A3 1103
    今年T2A1 1201
    今年T2A2 1202
    今年T2A3 1203
    schyear - 1
    上年T1A1 1101
    上年T1A2 1102
    上年T1A3 1103
    上年T2A1 1201
    上年T2A2 1202
    上年T2A3 1203
    schyear - 2
    前年T1A1 1101
    前年T1A2 1102
    前年T1A3 1103
    前年T2A1 1201
    前年T2A2 1202
    前年T2A3 1203

    而抽取DSE分數比較複雜, 要每個學生獨立抽取DSE英文科成績, 而DSE英文科的CODE是'A020'
    請參考紫紅色部份。


    select
    a.CLASSCODE '班別',
    a.CLASSNO '班號',
    a.ENNAME '英文姓名',
    c.en_des 'Subject',
    c.ch_des '科目',
    a.SCHYEAR '學年',
    d.sysscore '今年T1A1成績',
    e.sysscore '今年T1A2成績',
    f.sysscore '今年T1A3成績',
    g.sysscore '今年T2A1成績',
    j.sysscore '去年T1A1成績' ,
    (select b2.SUBJGRDLVL from wsadmin.tb_hke_dsecandinfo a2
    left outer join wsadmin.tb_hke_dsesubjresult b2 on a2.suid=b2.suid and a2.schcode=b2.schcode
    and a2.candno=b2.candno and b2.subjcode='A020' and a2.stuid=a.stuid and a2.examyear=a.schyear and a2.examyear=b2.examyear ) '今年DSE成績'

    from wsadmin.VW_STU_LATESTSTUDENT a
    left outer join wsadmin.TB_ASR_SUBJASSESSDATA d
    on a.SUID = d.SUID and a.SCHLVL = d.SCHLEVEL and a.SCHSESS = d.SCHSESSION and a.SCHYEAR = d.SCHYEAR and a.STUID = d.STUID and d.TIMESEQ = 1101 and d.subjcode='165'
    left outer join wsadmin.TB_ASR_SUBJASSESSDATA e
    on a.SUID = e.SUID and a.SCHLVL = e.SCHLEVEL and a.SCHSESS = e.SCHSESSION and a.SCHYEAR = e.SCHYEAR and a.STUID = e.STUID and e.TIMESEQ = 1102 and e.subjcode=d.subjcode
    left outer join wsadmin.TB_ASR_SUBJASSESSDATA f
    on a.SUID = f.SUID and a.SCHLVL = f.SCHLEVEL and a.SCHSESS = f.SCHSESSION and a.SCHYEAR = f.SCHYEAR and a.STUID = f.STUID and f.TIMESEQ = 1103 and f.subjcode=d.subjcode
    left outer join wsadmin.TB_ASR_SUBJASSESSDATA g
    on a.SUID = g.SUID and a.SCHLVL = g.SCHLEVEL and a.SCHSESS = g.SCHSESSION and a.SCHYEAR = g.SCHYEAR and a.STUID = g.STUID and g.TIMESEQ = 1201 and g.subjcode=f.subjcode
    left outer join wsadmin.TB_ASR_SUBJASSESSDATA j
    on a.SUID = j.SUID and a.SCHLVL = j.SCHLEVEL and a.SCHSESS = j.SCHSESSION and
    a.SCHYEAR-1 = j.SCHYEAR and a.STUID = j.STUID and j.TIMESEQ = 1101 and j.subjcode=g.subjcode

    left outer join wsadmin.tb_hse_common c
    on a.suid=c.suid and d.subjcode=c.code_id and c.tb_id='SBJ'
    where a.SCHYEAR=? and a.classlvl='S6'
    order by a.CLASSCODE, a.CLASSNO
     
    #2 edb-catherinewschan, 2023-01-17
    Last edited: 2023-01-17