Oracle SQL:将系谱数据按顺序汇总

时间:2018-05-24 02:33:54

标签: sql oracle

我有一个父子关系表,如下所示

src_data      date       dst_data         key
---------------------------------------------
P1         2018-01-01       D2            123
D2         2018-01-02       D3            123
D3         2018-01-03       D4            123

我想创建一个查询/ SQL来显示如下

key        link
-----------------
123        P1
123        D2
123        D3
123        D4  

我该怎么办?谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

虽然,您的问题不是很明确,但下面是对所需输出的查询

SELECT srcData as Link, KEY
FROM tableA
UNION
SELECT dst_data As Link, Key
FROM tableA

答案 1 :(得分:0)

如果您使用分层查询,则行已按您的要求排序:

SELECT key, src_data, dst_data
  FROM t
 WHERE key = 123
 START WITH src_data = 'P1'
 CONNECT BY src_data =  PRIOR dst_data;

123 P1  D2
123 D2  D3
123 D3  D4

这会回答你的问题吗?

答案 2 :(得分:0)

使用自全外连接并添加某种类型的订单序列或主键。请尝试下次准备测试数据以节省我们的时间输入:

WITH test_data AS
(
SELECT 1 row_seq, 'P1' src_data,  '2018-01-01' src_date,  'D2' dst_data, 123 data_key FROM dual
UNION ALL
SELECT 2, 'D2', '2018-01-02', 'D3', 123  FROM dual
UNION ALL
SELECT 3, 'D3', '2018-01-03', 'D4', 123  FROM dual
)
SELECT NVL(a.src_data, b.dst_data) all_data
FROM test_data a FULL OUTER JOIN test_data b ON a.src_data = b.dst_data
ORDER BY a.row_seq
/

输出 - 您可以添加其余列:

ALL_DATA
---------
P1
D2
D3
D4