#sql #oracle
#sql #Oracle
Вопрос:
У меня есть запрос, который использует connect by до для получения значений иерархическим способом,
SELECT EMP_ID, FIRST_NAME, SUPERVISOR_ID FROM TABLE
WHERE
EMP_STATUS = 'A'
AND LEVEL <=15
START WITH EMP_id ='XXXXXXX'
CONNECT BY PRIOR EMP_ID = SUPERVISOR_ID;
Теперь мне нужно дважды отобразить строки со значением supervisor_id, жестко закодированным в одной из строк. Желаемый результат,
EMP_ID1 NAME1 SUPERVISOR_ID1
EMP_ID1 NAME1 HARDCODED_VALUE
EMP_ID2 NAME2 SUPERVISOR_ID2
EMP_ID2 NAME2 HARDCODED_VALUE
Будут ли подключаться по предыдущему и группироваться по совместной работе? Я могу использовать UNION ALL для отображения строки дважды, но не уверен, как обращаться с жестко закодированным значением. Пожалуйста, предложения.
Комментарии:
1. Если вы используете Oracle, то почему вы отметили MySQL?
Ответ №1:
Как насчет простого использования union all
:
WITH t AS (
SELECT EMP_ID, FIRST_NAME, SUPERVISOR_ID
FROM TABLE
WHERE EMP_STATUS = 'A' AND
LEVEL <= 15
START WITH EMP_id ='XXXXXXX'
CONNECT BY PRIOR EMP_ID = SUPERVISOR_ID
)
SELECT EMP_ID, FIRST_NAME, SUPERVISOR_ID
FROM t
UNION ALL
SELECT EMP_ID, FIRST_NAME, 'HARDCODED_VALUE'
FROM t;
Если вам нужны данные в определенном порядке, тогда вам следует использовать ORDER BY
:
SELECT EMP_ID, FIRST_NAME, SUPERVISOR_ID
FROM t
UNION ALL
SELECT EMP_ID, FIRST_NAME, 'HARDCODED_VALUE'
FROM t
ORDER BY EMP_ID,
(CASE WHEN SUPERVISOR_ID <> 'HARDCODED_VALUE' THEN 1 ELSE 2 END)
Комментарии:
1. Попробовал это. Результат не в ожидаемом формате. Мне это нужно как две записи для сотрудника, одна с фактическим значением, за которым следует жестко закодированное значение, а затем следующий сотрудник. Он выдает как бы все фактические значения сразу, за которыми следует жестко заданное. Но это хороший вариант. Пытаюсь посмотреть, могу ли я внести некоторые изменения поверх этого.
2. Вам просто нужен @mohanakrishnan, если вы хотите получить результаты в определенном порядке.
3. Если я использую order к тому времени иерархия нарушится.
4. @mohanakrishnan . . . Добавьте счетчик в иерархию и используйте его для упорядочивания.
Ответ №2:
попробуйте это с объединением:
SELECT EMP_ID, 'NAME1', SUPERVISOR_ID FROM TABLE
удачи!
Оливер
Комментарии:
1. Должны работать как connect by prior, так и order by. Уже устал от этого и не получил ожидаемого результата