0

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

这是插入到 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 是我不知道该放什么的部分。有人可以启发我吗?

4

1 回答 1

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#"

对于几乎任何其他情况,它都有问题。

- 如果有两条以上的腿

- 如果第一站在悉尼结束,但第二站没有在悉尼开始

等等

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

于 2012-11-14T05:47:31.113 回答