0

こんにちは、私は2つのテーブルAとBを持っています

表 A:

Order        Pick up
100          Toronto
100          Mississauga
100          Scarborough

表 B

Order              Drop off
100                Oakvile
100                Hamilton
100                Milton

この出力を取得する方法を教えてください (つまり、B のフィールドを A の右側に結合したいだけです)。

Order    pickup        Dropoff
100      Toronto       oakvile
100      Mississauga   Hamilton
100      Scarborough   Milton

参加しようとしましa.rownum = b.rownumたが、うまくいきませんでした。

4

3 に答える 3

1

使用状況から、rownumOracle を使用していると思われます。次のことを試みることができます。

select a.Order as "order", a.Pickup, b.DropOff
from (select a.*, rownum as seqnum
      from a
     ) a join
     (select b.*, rownum as seqnum
      from b
     ) b
     on a.order = b.order and a.seqnum = b.seqnum;

(これは、すべての注文が正確に一致することを前提としています。)

これは機能するように見えるかもしれませんが(小さな例では機能するはずです)、一般的には機能しないことを強調しなければなりません。また、レコードを削除したデータでは機能しません。また、おそらく並列システムでは機能しません。少量のデータがある場合は、Excel にダンプしてそこで作業を行うことをお勧めします。そうすれば、ペアが意味をなすかどうかを確認できます。

また、順序を指定する列がある場合は、基本的に同じ構造が機能します。

select coalesce(a.Order, b.Order) as "order", a.Pickup, b.DropOff
from (select a.*,
             row_number() over (partition by "order" order by <ordering field>) as seqnum
      from a
     ) a join
     (select b.*,
             row_number() over (partition by "order" order by <ordering field>) as seqnum
      from b
     ) b
     on a.order = b.order and a.seqnum = b.seqnum;
于 2013-06-08T17:54:37.093 に答える
1

OPは何も言及していないのでRDBMS

SQL SERVER 2008私は彼のRDBMSとして自由に取っています。OP が必要とする場合は、次のクエリを他のRDBMSに簡単に変換できます。

select A.[Order],
    ROW_NUMBER() OVER(ORDER BY A.[Pick up]) rn1,
    A.[Pick up]
    into A1
FROM A
;
select B.[Order],
    ROW_NUMBER() OVER(ORDER BY B.[Drop off]) rn2,
    B.[Drop off]
    into B1
FROM B
;
Select A1.[Order],
    A1.[Pick up],
    B1.[Drop off]
FROM A1
INNER JOIN B1 on A1.rn1=B1.rn2

テストする SQL FIDDLE

于 2013-06-08T16:47:45.553 に答える