1

私はこれが私が持っているものであるという質問を受けました

SQL> desc trktripleg
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 T#                                        NOT NULL NUMBER(10)
 LEG#                                      NOT NULL NUMBER(2)
 DEPARTURE                                 NOT NULL VARCHAR2(30)
 DESTINATION                               NOT NULL VARCHAR2(30)

私は次のことを試みました

SQL> select destination,departure from trktripleg where T#=15;

DESTINATION                    DEPARTURE
------------------------------ ------------------------------
Adelaide                       Melbourne
Melbourne                      Sydney

どうすればこのようにできますか...

SOURCE     DESTINATION   DESTINATION2

Adelaide   Melbourne    Sydney

目的地が1つしかない場合

SQL> select destination,departure from trktripleg where T#=11;

DESTINATION                    DEPARTURE
------------------------------ ------------------------------
Sydney                         Melbourne


SOURCE     DESTINATION   DESTINATION2

Adelaide   Melbourne    

T#を提供するように、現在ビューを実行しています。ソースと宛先の出発点が表示されます。

いくつかの生の挿入データ。

INSERT INTO TRKTRIPLEG VALUES(11, 1, 'Melbourne', 'Sydney');

INSERT INTO TRKTRIPLEG VALUES(15, 1, 'Sydney', 'Melbourne');
INSERT INTO TRKTRIPLEG VALUES(15, 2, 'Melbourne', 'Adelaide');

すべての助けをありがとう。私はoraclesqlを使用しています。

4

3 に答える 3

2

私があなたのスキーマを正しく理解していれば、あなたはこれを行うことができます

 SELECT   t1.departure AS Source,
         t1.destination AS Destination1,
         t2.destination AS Destination2
  FROM      trktripleg t1
         LEFT OUTER JOIN
            trktripleg t2
         ON t2.T# = t1.T# AND t2.LEG# = 2
 WHERE   t1.LEG# = 1;

SQLフィドルの例

于 2012-11-26T10:42:27.867 に答える
2
create table trktripleg
(
T#                                         NUMBER(10)NOT NULL
 ,LEG#                                       NUMBER(2) NOT NULL
 ,DEPARTURE                                  VARCHAR2(30) NOT NULL
 ,DESTINATION                                VARCHAR2(30) NOT NULL
  );

INSERT INTO TRKTRIPLEG VALUES(11, 1, 'Melbourne', 'Sydney');

INSERT INTO TRKTRIPLEG VALUES(15, 1, 'Sydney', 'Melbourne');
INSERT INTO TRKTRIPLEG VALUES(15, 2, 'Melbourne', 'Adelaide');

SELECT DEPARTURE
      ,DESTINATION
      ,DESTINATION_2
FROM
(
SELECT DEPARTURE
      ,DESTINATION
      ,LEAD(DESTINATION, 1, NULL) 
              OVER (partition by T# ORDER BY LEG#) DESTINATION_2
      ,LEG#
FROM trktripleg
)
WHERE LEG#=1

http://www.sqlfiddle.com/#!4/5b27c/11

于 2012-11-26T10:43:29.250 に答える
0

あなたはこのようにそれを行うことができます。

select 
    t,
    MAX(source),
    max(destination),
    max(destination2)
from
(
    select t, departure as source, DESTINATION ,null as destination2 from yourtable where LEG = 1
    union all
    select t, null, null, destination from yourtable where LEG =2 
) p
group by t

より一般的には、値に基づいてピボットを実行できlegます。

于 2012-11-26T10:41:58.387 に答える