SQL 怎樣將WEBSAMS 內所有監護人資料,跟輸入的次序匯出?

本文由 kriswong 在 2019-08-31 發表於 "WebSAMS 討論區" 討論區

標籤:
  1. 55038641

    kriswong
    Expand Collapse

    文章:
    1
    讚:
    0
    怎樣將WEBSAMS 內所有監護人資料,跟輸入的次序匯出?

    例如1: 第一輸入父親, 第二輸入母親,第三輸入祖父
    例如2: 第一輸入母親, 第二輸入母親,第三輸入祖母
    例如3: 第一輸入祖母, 第二輸入祖父,第三輸入父親

    因為想出第一聯絡人, 第二聯絡人, 第三聯絡人, 方便老師聯絡。即以下的怎樣改?不想跟監護人, 父親, 母親, 而是跟WEBSAMS內的1, 2, 3。可以嗎?

    select
    a.REGNO '註冊編號',
    a.schyear '學年',
    a.classcode '班別',
    a.classno '班號',
    a.ENNAME '英名姓名',
    a.CHNAME '中文姓名',
    a.SEX '性別',
    a.HKID '身份證',
    a1.ch_des '身份證明文件類型',
    a.DOCNO '身份證明文件號碼',
    dateformat(a.DOB, 'DD/MM/YYYY') as '出生日期',
    (datediff(day, a.dob, now())/365) '年齡',
    a.RELIGION '宗教',
    a.PLACEOFORIGIN '籍貫',
    a.POB '出生地點',
    a.BIRTHCERT '出生證明書',
    dateformat(d.FIRSTATTDATE, 'DD/MM/YYYY') as '入學日期',
    t.classcode '入學級別',
    a.STRN '學生編號',
    a.HOMETEL '家居電話',
    a.email '電郵',
    a.MOBILENO '流動電話',
    a.SCHFROM '以前就讀學校',
    a.LASTCLASSLVL '以前就讀級別',
    dateformat(a.DATEFROMMAINLAND, 'DD/MM/YYYY') '內地來港日期',
    guard.CHNAME '監護人姓名',
    guard.enNAME '監護人英文姓名',
    guard.EMERGENCYPHONE '監護人緊急電話',
    guard.occupation '監護人職業',
    guard1.ch_des '監護人關係',
    f.chname '父親姓名',
    f.enname '父親英文姓名',
    f.phone '父親電話',
    f.EMERGENCYPHONE '父親緊急聯絡電話',
    f.OCCUPATION '父親職業',
    m.chname '母親姓名',
    m.enname '母親英文姓名',
    m.phone '母親電話',
    m.EMERGENCYPHONE '母親緊急聯絡電話',
    m.OCCUPATION '母親職業',

    (select list(string(SIBC.CLASSNAME, ' ', SIB.CHNAME), ', ')
    from VW_STU_LATESTSTUDENT SIB
    left outer join TB_SCH_SCHCLASS SIBC
    on SIBC.SUID=SIB.SUID and SIBC.SCHYEAR=SIB.SCHYEAR and
    SIBC.SCHLEVEL=SIB.SCHLVL and SIBC.SCHSESSION=SIB.SCHSESS and
    SIBC.CLASSLEVEL=SIB.CLASSLVL and SIBC.CLASSCODE=SIB.CLASSCODE
    where SIB.SUID=a.SUID and SIB.SCHYEAR=a.SCHYEAR and
    SIB.SIBGRP<>-1 and SIB.SIBGRP=a.SIBGRP and
    SIB.STUID<>a.STUID
    ) '兄弟姊妹',
    (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) '家居地址'
    from VW_STU_LATESTSTUDENT a
    left outer join 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 TB_STU_PARENT guard
    on guard.SUID = a.SUID and guard.STUID=a.STUID and
    guard.GUARDIANIND='1'
    left outer join TB_HSE_COMMON guard1 on
    a.SUID=guard1.SUID and guard1.CODE_ID=guard.relation and
    guard1.TB_ID='RELATE'
    left outer join TB_STU_PARENT m on
    a.SUID = m.SUID and a.STUID = m.STUID and m.RELATION = '02'
    left outer join TB_STU_PARENT f on
    a.SUID = f.SUID and a.STUID = f.STUID and f.RELATION = '01'
    left outer join TB_STU_STUSCHREC t on
    a.SUID=t.SUID and a.STUID=t.STUID and t.SCHYEAR=(SELECT MIN(SCHYEAR)FROM TB_STU_STUSCHREC U WHERE t.SUID = U.SUID AND t.STUID = U.STUID)
    left outer join TB_HSE_COMMON n on
    a.SUID=n.SUID and n.CODE_ID=a.Nationality and n.TB_ID='NATION'
    left outer join TB_HSE_COMMON h on
    a.SUID=h.SUID and h.CODE_ID=a.SCHHOUSE and h.TB_ID='SCHHUS'
    left outer join
    (select STUID, min(FIRSTATTDATE) 'FIRSTATTDATE' from TB_STU_STUSCHREC group by STUID) d
    on d.STUID = a.STUID
    left outer join 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
     
    #1 kriswong, 2019-08-31
  2. 58521906

    edb-catherinewschan
    Expand Collapse

    文章:
    73
    讚:
    0
    老師, 你好

    若按你的要求, 在原本的SQL上做列出不同的次序, 是不可能的。 因為顯示的欄位名稱已經定了 (例如: 父親姓名, 父親英文姓名, 父親電話, 父親緊急聯絡電話...等等)
    惟有把所有監護人的資料顯示在同一個欄位名稱上, 叫"所有監護人資料", 而每一位監護人都用 "||" 來分隔開。
    這樣系統資料才有機會按不同的次序列出, 但由於以下紅色字的SQL部份未能加入SORTING功能, 請你試試匯出資料看看是否跟WEBSAMS的次序一樣, 因為在我的系統是可以做到一樣的。

    select
    a.REGNO '註冊編號',
    a.schyear '學年',
    a.classcode '班別',
    a.classno '班號',
    a.ENNAME '英名姓名',
    a.CHNAME '中文姓名',
    a.SEX '性別',
    a.HKID '身份證',
    a1.ch_des '身份證明文件類型',
    a.DOCNO '身份證明文件號碼',
    dateformat(a.DOB, 'DD/MM/YYYY') as '出生日期',
    (datediff(day, a.dob, now())/365) '年齡',
    a.RELIGION '宗教',
    a.PLACEOFORIGIN '籍貫',
    a.POB '出生地點',
    a.BIRTHCERT '出生證明書',
    dateformat(d.FIRSTATTDATE, 'DD/MM/YYYY') as '入學日期',
    t.classcode '入學級別',
    a.STRN '學生編號',
    a.HOMETEL '家居電話',
    a.email '電郵',
    a.MOBILENO '流動電話',
    a.SCHFROM '以前就讀學校',
    a.LASTCLASSLVL '以前就讀級別',
    dateformat(a.DATEFROMMAINLAND, 'DD/MM/YYYY') '內地來港日期',
    (
    select list(string(ppcommon.ch_des, '資料: 姓名: ',pparent.chname, ', 英文名: ',pparent.enname, ', 電話: ',pparent.phone, ', 緊急電話: ',pparent.EMERGENCYPHONE, ', 職業: ',pparent.OCCUPATION),' || ')
    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'
    where pparent.suid=a.suid and pparent.stuid=a.stuid and 1=1
    ) '所有監護人資料',

    (select list(string(SIBC.CLASSNAME, ' ', SIB.CHNAME), ', ')
    from wsadmin.VW_STU_LATESTSTUDENT SIB
    left outer join wsadmin.TB_SCH_SCHCLASS SIBC
    on SIBC.SUID=SIB.SUID and SIBC.SCHYEAR=SIB.SCHYEAR and
    SIBC.SCHLEVEL=SIB.SCHLVL and SIBC.SCHSESSION=SIB.SCHSESS and
    SIBC.CLASSLEVEL=SIB.CLASSLVL and SIBC.CLASSCODE=SIB.CLASSCODE
    where SIB.SUID=a.SUID and SIB.SCHYEAR=a.SCHYEAR and
    SIB.SIBGRP<>-1 and SIB.SIBGRP=a.SIBGRP and
    SIB.STUID<>a.STUID
    ) '兄弟姊妹',
    (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) '家居地址'
    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 n on
    a.SUID=n.SUID and n.CODE_ID=a.Nationality and n.TB_ID='NATION'
    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
    (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
     
    #2 edb-catherinewschan, 2019-09-04
    Last edited: 2019-09-04