列出一个人及其第n个电话号码

我正在使用PowerSchool(Oracle DB),并且为了导出我们的紧急机器人电话服务,我需要提取一份学生报告以及与他们相关的前7名紧急电话号码。我有一个查询,仅查询紧急电话号码,但在将第n个电话记录提取到正确的上下文时遇到麻烦。运行当前代码时,出现“ ORA-00923:在预期位置找不到FROM关键字”。

我可以在WITH语句中从查询中选择所有值,并且可以按预期运行。但是,我不知道如何在主查询中正确地抓住它们。

WITH emerglist as (
    select emergnumbers.stu_dcid,emergnumbers.contact_priority_order,1 as phone_order,emergnumbers.contact_phone_1 as phone_number
    from emergnumbers where contact_phone_1 is not null
    UNION
    select emergnumbers.stu_dcid,2 as phone_order,emergnumbers.contact_phone_2 as phone_number
    from emergnumbers where contact_phone_2 is not null
    UNION
    select emergnumbers.stu_dcid,3 as phone_order,emergnumbers.contact_phone_3 as phone_number
    from emergnumbers where contact_phone_3 is not null
)
--select * from emerglist;  -- this works

select distinct 
    s.student_number as referencecode,s.first_name as firstname,s.last_name as lastname,--emergency numbers
    (select enum.phone_number from enum where rn=1) as emerg_1
    (select enum.phone_number from enum where rn=2) as emerg_2,(select enum.phone_number from enum where rn=3) as emerg_3,(select enum.phone_number from enum where rn=4) as emerg_4,(select enum.phone_number from enum where rn=5) as emerg_5,(select enum.phone_number from enum where rn=6) as emerg_6,(select enum.phone_number from enum where rn=7) as emerg_7
from students s
    left outer join (  select emerglist.*,rownum rn from emerglist order by contact_priority_order,phone_order  ) enum on s.dcid = enum.stu_dcid             
where s.enroll_status=0
;

编辑以添加:我的目标是让每位学生一行,并尽可能多地填写紧急号码栏,没有任何间隔(例如,emerg1 =#,emerg_2 = null,emerg_3 =#) 。每个学生可以有0-10个联系人,每个联系人可以有0-5个号码。每个学生最多只能有7个号码。这是较大查询的子集,该查询还为下雪天,电子邮件地址和其他人口统计信息等正常消息获取主要数字。除紧急电话号码外,所有其他方法均有效。这些仅在真正紧急情况下使用,而我们希望达到尽可能多的数字。

来自EmergList的样本数据:

STU_DCID   CONTact_PRIORITY_ORDER   PHONE_ORDER   PHONE_NUMber
52  1   1   (222) 222-6476
52  2   1   (222) 555-9649
52  2   2   (222) 888-2212
58  1   1   (222) 222-1734
58  1   2   (222) 555-7222

所需结果:

REFERENCECODE   FIRSTNAME   LASTNAME   EMERG_1   EMERG_2   EMERG_3   EMERG_4   EMERG_5   EMERG_6   EMERG_7
52   John   Smith   (222) 222-6476   (222) 555-9649   (222) 888-2212
58   Mary   Jones   (222) 222-1734   (222) 555-7222
ning61 回答:列出一个人及其第n个电话号码

下一步是实现此目标的方法之一...

select STU_DCID,MAX("1") "1",MAX("2") "2",MAX("3") "3",MAX("4") "4",MAX("5") "5",MAX("6") "6",MAX("7") "7",MAX("8") "8",MAX("9") "9",MAX("10") "10"
from (
   select STU_DCID,CONTACT_PRIORITY_ORDER,PHONE_ORDER,PHONE_NUMBER,ROW_NUMBER() OVER (PARTITION BY STU_DCID 
                             ORDER BY CONTACT_PRIORITY_ORDER,PHONE_ORDER) RN
   from EmergList) src
PIVOT (
MAX(PHONE_NUMBER)
FOR RN IN (1 "1",2 "2",3 "3",4 "4",5 "5",6 "6",7 "7",8 "8",9 "9",10 "10")
) GROUP BY STU_DCID;

然后,您只需更改列的alis并在src上添加额外的连接即可获取学生姓名...您将获得的当前结果是这个

STU_DCID    |       1       |       2        |      3         |4|5|6|7|8|9|10|
    52      |(222) 222-6476 | (222) 555-9649 | (222) 888-2212 | | | | | | | |
    58      |(222) 222-1734 | (222) 555-7222 |                | | | | | | | |
本文链接:https://www.f2er.com/3165930.html

大家都在问