SQL 提取學生及監護人資料

本文由 tr-angus 在 2019-09-20 發表於 "WebSAMS 討論區" 討論區

  1. 56784352

    tr-angus
    Expand Collapse

    文章:
    16
    讚:
    0
    請問提取以下學生及監護人資料的SQL是什麼? 謝謝!!

    班別
    學號
    學生註冊編號
    學生姓名
    學生流動電話
    住宅電話
    中文地址 (結合為一欄位)
    宗教

    第一監護人姓名
    稱銜
    關係 (例如: 父、母、祖父、哥等)
    聯絡電話
    緊急聯絡電話
    職業
    家長會成員

    第二監護人姓名
    稱銜
    關係 (例如: 父、母、祖父、哥等)
    聯絡電話
    緊急聯絡電話
    職業
    家長會成員

    第三監護人姓名
    稱銜
    關係 (例如: 父、母、祖父、哥等)
    聯絡電話
    緊急聯絡電話
    職業
    家長會成員
     
    #1 tr-angus, 2019-09-20
  2. 56784352

    tr-angus
    Expand Collapse

    文章:
    16
    讚:
    0
    稱銜 (例如: Mr, Mrs, Ms等)
     
    #2 tr-angus, 2019-09-20
  3. 58521906

    edb-catherinewschan
    Expand Collapse

    文章:
    74
    讚:
    0
    你好,

    其實早前的POST已解釋了, 同一個監護人欄位是不能輸出不同的親屬關係。
    因為每一個欄位出的資料是預先指定的, 所以監護人1是不會包含不同的親屬關系。
    但我曾經寫過一個SQL, 是把所有監護人集合在同一個欄位, 並以" | " 做分隔顯示出來, 這個就可以做到一個欄位出顯不同監護人的情況。
    這樣, 可以用EXCEL 加插3個欄位, 再用FORMULA, 做出監護人1, 監護人2, 監護人3

    你可以參考附件的EXCEL 內的FORMULA 去取出"所有監護人"的其中一部份, 就可以分拆出監護人1, 監護人2, 監護人3 了。


    以下是你想要的SQL

    select
    a.classcode '班別',
    a.classno '學號',
    a.REGNO '學生註冊編號',
    a.ENNAME '英名姓名',
    a.CHNAME '中文姓名',
    a.MOBILENO '流動電話',
    a.HOMETEL '住宅電話',
    (case when trim(a.CHDISTRICT)<>'' then trim(a.CHDISTRICT) else '' end) +
    (case when trim(a.CHSTREET)<>'' then trim(a.CHSTREET) else '' end) +
    (case when trim(a.CHVILLAGEESTATE)<>'' then trim(a.CHVILLAGEESTATE) else '' end) +(case when trim(a.CHBUILDING)<>'' then trim(a.CHBUILDING) else '' end) +(case when trim(a.CHBLKNO)<>'' then trim(a.CHBLKNO) + '座' else '' end) +(case when trim(a.CHFLOORNO)<>'' then trim(a.CHFLOORNO) + '樓' else '' end)+(case when trim(a.CHFLATNO)<>'' then trim(a.CHFLATNO) + '室' else '' end) '家居地址',
    r.ch_des '宗教',
    (
    select list(string('稱銜: ', titcommon.ch_des,', 關係: ', ppcommon.ch_des, ', 姓名: ',pparent.chname, ' ' ,pparent.enname, ', 電話: ',pparent.phone, ', 緊急聯絡電話: ',pparent.EMERGENCYPHONE
    , ', 職業: ',pparent.occupation, ', 家長會成員: ',cmtcommon.ch_des),' | ')
    from wsadmin.TB_STU_PARENT pparent
    left outer join wsadmin.TB_HSE_COMMON ppcommon on pparent.SUID=ppcommon.SUID and pparent.relation=ppcommon.CODE_ID and ppcommon.TB_ID='RELATE'
    left outer join wsadmin.TB_HSE_COMMON titcommon on pparent.SUID=titcommon.SUID and pparent.title=titcommon.CODE_ID and titcommon.TB_ID='TITLE'
    left outer join wsadmin.TB_HSE_COMMON cmtcommon on pparent.SUID=cmtcommon.SUID and pparent.COMMITTEE=cmtcommon.CODE_ID and cmtcommon.TB_ID='COMMIT'
    where pparent.suid=a.suid and pparent.stuid=a.stuid and 1=1
    ) '所有監護人資料'
    from wsadmin.VW_STU_LATESTSTUDENT a
    left outer join wsadmin.TB_SCH_SCHCLASS s
    on s.SUID=a.SUID and s.SCHYEAR=a.SCHYEAR and
    s.SCHLEVEL=a.SCHLVL and s.SCHSESSION=a.SCHSESS and
    s.CLASSLEVEL=a.CLASSLVL and s.CLASSCODE=a.CLASSCODE
    left outer join wsadmin.TB_STU_STUSCHREC t on
    a.SUID=t.SUID and a.STUID=t.STUID and t.SCHYEAR=(SELECT MIN(SCHYEAR)FROM wsadmin.TB_STU_STUSCHREC U WHERE t.SUID = U.SUID AND t.STUID = U.STUID)
    left outer join wsadmin.TB_HSE_COMMON h on
    a.SUID=h.SUID and h.CODE_ID=a.SCHHOUSE and h.TB_ID='SCHHUS'
    left outer join wsadmin.TB_HSE_COMMON r on
    a.SUID=r.SUID and r.CODE_ID=a.RELIGION and r.TB_ID='RELIG'
    left outer join
    (select STUID, min(FIRSTATTDATE) 'FIRSTATTDATE' from wsadmin.TB_STU_STUSCHREC group by STUID) d
    on d.STUID = a.STUID
    left outer join wsadmin.TB_HSE_COMMON a1 on
    a1.SUID=a.SUID and a1.CODE_ID=a.DOCTYPE and a1.TB_ID='TVLDOC'
    where a.SCHYEAR=? and a.CLASSLVL=?
    order by a.SCHLVL, a.SCHSESS, a.CLASSLVL, a.CLASSCODE, a.CLASSNO
     

    附件文件:

    #3 edb-catherinewschan, 2019-09-24
  4. 56784352

    tr-angus
    Expand Collapse

    文章:
    16
    讚:
    0
    Thanks a lot
     
    #4 tr-angus, 2019-09-26