выберите строку дважды из одной таблицы в оракуле - PullRequest
0 голосов
/ 16 марта 2019

У меня есть запрос, который использует соединение до получения значений в иерархической способ

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, чтобы дважды отобразить строку, но не знаю, как обращаться с жестко закодированным значением. Предложения, пожалуйста.

Ответы [ 2 ]

1 голос
/ 16 марта 2019

Как насчет простого использования 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)
0 голосов
/ 16 марта 2019

попробуйте это с союзом:

SELECT  EMP_ID, 'NAME1', SUPERVISOR_ID FROM TABLE 

удачи!Оливер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...