如何使用oracle sql合并行

时间:2012-11-14 05:07:57

标签: sql oracle

我无法从一行声明一个对象,因此可以在另一列中使用

这是插入表TRIPLEG的值,格式为TripNum#,Length#,Origin,Destination

INSERT INTO TRIPLEG VALUES(10, 1, 'Perth', 'Sydney');
INSERT INTO TRIPLEG VALUES(10, 2, 'Sydney', 'Brisbane');
INSERT INTO TRIPLEG VALUES(11, 1, 'Sydney', 'Melbourne');

我如何实际合并它们看起来像

T#   ORIGIN     DESTINATION1        DESTINATION2
---- ---------- ------------------- ----------------
10   Perth      Sydney              Brisbane
11   Sydney     Melbourne

我被要求创建一个关系视图,我猜它看起来像这样:

Create view 
as select t#, origin, destination, destination
from TRIPLEG

但是Destination2是我不知道放什么的部分。 有谁可以启发我吗?

1 个答案:

答案 0 :(得分:2)

这次旅行有多少条腿? 3? 100?您正在寻找的是交叉表。

你还没有说明TRIPLEG中的列是什么,所以我假设t#,leg,origin,destination。

对于您所描述的具体案例,这将有效:

SELECT 
"t#", 
MAX(DECODE(leg,1,origin)) origin, 
MAX(DECODE(leg,1,destination)) destination,
MAX(DECODE(leg,2,destination)) destination2
FROM TRIPLEG
GROUP BY "t#"

对于任何其他情况,它都存在问题。

- 如果有两条腿以上

- 如果一条腿在悉尼完成,但第二条腿在悉尼没有开始

试试这个,调查交叉表并提出更多问题。