从Oracle的同一张表中选择两次

时间:2019-03-16 09:26:22

标签: sql oracle

我有一个查询,该查询使用connect by before来推导层次结构中的值 方式

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 个答案:

答案 0 :(得分: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 :(得分:0)

尝试使用联合:

SELECT  EMP_ID, 'NAME1', SUPERVISOR_ID FROM TABLE 

祝你好运! 奥利弗