Sql 从一列到两列创建一个列表
需要有关oracle SQL的帮助 我有一张桌子Sql 从一列到两列创建一个列表,sql,oracle,union,Sql,Oracle,Union,需要有关oracle SQL的帮助 我有一张桌子 from to F B B R R D E X X Q 我需要清单 F B R D E X Q 所以我的问题是从R->D跳到E->X 编辑:这是一个包含from和to的大列表,与另一列citerium分开。通常在to列中都有from,所以我使用 SELECT from,snr as Nr FROM list where StrAbsNr = 1 union all SELECT
from to
F B
B R
R D
E X
X Q
我需要清单
F
B
R
D
E
X
Q
所以我的问题是从R->D跳到E->X
编辑:这是一个包含from和to的大列表,与另一列citerium分开。通常在to列中都有from,所以我使用
SELECT from,snr as Nr FROM list where StrAbsNr = 1
union all
SELECT to,snr + 1 as Nr FROM list
创建有序列表。但在某些部分存在间隙,示例中缺少D->E
有人有主意吗
select "from" as val from table
union
select to from table
如果你想维持秩序:
select distinct val
from (select "from" as val, rownum, 1 as valOrder from table
union
select to, rownum, 2 as valOrder from table)
order by rownum,valOrder
对于您的示例,这项工作:
WITH ft AS
(SELECT 'f' vfrom, 'b' AS vto FROM dual UNION ALL
SELECT 'b' , 'r' FROM dual UNION ALL
SELECT 'r','d' FROM dual UNION ALL
SELECT 'e','x' FROM dual UNION ALL
SELECT 'x','q' FROM dual )
SELECT a.a, MAX(rn), MIN(ob)
FROM
( SELECT vfrom a , rownum rn, 1 ob FROM ft
UNION ALL
SELECT vto , rownum rn, 2 ob FROM ft
) a
GROUP BY a
ORDER BY MAX(rn), MIN(ob)
A MAX(RN) MIN(OB)
- ---------- ----------
f 1 1
b 2 1
r 3 1
d 3 2
e 4 1
x 5 1
q 5 2
7 rows selected
或分析功能行号:
SELECT *
FROM
(SELECT a.a,
row_number() over (partition BY a order by rn, ob) rna,
ob,
rn
FROM
( SELECT vfrom a, rownum rn, 1 ob FROM ft
UNION ALL
SELECT vto , rownum rn, 2 ob FROM ft
) a
)
WHERE rna=1
ORDER BY rn,
ob
A RNA OB RN
- ---------- ---------- ----------
f 1 1 1
b 1 2 1
r 1 2 2
d 1 2 3
e 1 1 4
x 1 2 4
q 1 2 5
7 rows selected
不清楚你在问什么。您想按特定顺序输出吗?你似乎这样建议。否则,使用UNION就是一个简单的问题,这也意味着您将获得不同的值。UNION All将返回重复项这可能是他所寻找的,但您如何看待R->D和E->X?“你认为他这么说是不是有什么意思?@mathguy-我认为他用更简单的方式解释的是删除重复的内容;通过编辑。。。您假设当前的rownum有意义。相反,它看起来像一个层次结构,其中输入行可能不一定按该层次结构排列。@mathguy-如果我查看给定的预期输出,似乎他想要的是第一个from,然后是col per rownum的顺序,并且没有DUP