【发布时间】:2019-11-04 14:38:34
【问题描述】:
我正在使用 PowerSchool (Oracle DB),为了导出我们的紧急机器人呼叫服务,我需要提取学生报告以及与他们关联的前 7 个紧急电话号码。我有一个查询,它只提取紧急号码,但无法将第 n 个电话记录拉到正确的上下文中。当我运行当前代码时,我得到“ORA-00923: FROM keyword not found where expected”。
我可以从 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, emergnumbers.contact_priority_order, 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, emergnumbers.contact_priority_order, 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
【问题讨论】:
-
您能提供示例数据和预期输出吗?认为使用 PIVOT 进行正常连接会更好,而不是许多内部选择...
-
我以前从未使用过 Pivot...我会研究一下 - 谢谢!
-
我仍在试图弄清楚如何在此站点中嵌入示例数据。
-
您不能嵌入它,您必须手动将其编写为文本,将其格式化为表格并放置空格,以便网站将其视为代码......看看这个例子stackoverflow.com/questions/42955002/…