дважды выберите строку из одной и той же таблицы в oracle

#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. Уже устал от этого и не получил ожидаемого результата