我有一个查询,该查询使用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两次显示该行,但不确定如何处理硬编码值。请提出建议。
答案 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
祝你好运! 奥利弗