Я использую 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, 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