-1

ここに2つのテーブルがあります

表 r

    id        |add       |jid  |sid|cocode
    ------------------------------------------
    0234567890|PO BOX 456|p123a|2  |TRAVEL2000
    0234567890|PO BOX 789|q456b|4  |TRAVEL2000
    0234567890|PO BOX 123|r789c|1  |TRAVEL2000

表 o

    jid  |pkey      |tid|date      |cid
    ---------------------------------
    q334a|0234567890|1  |15/08/2013|200

id = pkey を使用して tid、date、および cid 情報を取得する目的で、両方のテーブル o とテーブル r をマージして構成される新しいテーブルを作成したいと思います。また、cocode を一意にする必要があります。問題は、上記の例とは異なる可能性があるため、どのレコードを出力として選択するために jid を使用してマッチングを行うことができないことです。そこで、昇順で最新の jid (この場合は r789c) を取得しようと考えています。私の期待される結果テーブルは次のようになります。

    id        |add       |jid  |sid|cocode    |tid|date      |cid
    -------------------------------------------------------------
    0234567890|PO BOX 123|r789c|1  |TRAVEL2000|1  |15/08/2013|200

私は SQL Server 2008 を使用しています。どんなソリューションでも大歓迎です。ありがとう。

4

2 に答える 2

1

r(jid に基づく)の最後のレコードを の対応するレコードと結合したいようですo。もしそうなら、次のクエリはあなたが望むことをします:

select r.id, r.add, r.jid, r.sid, r.cocode, o.tid, o.date, o.cid
from (select r.*, row_number() over (partition by id order by jid desc) as seqnum
      from r
     ) r join
     o
     on r.id = o.pkey and seqnum = 1;
于 2013-08-28T00:52:11.137 に答える
0

まず、そのデータを保持するための対応するテーブルを作成します。次に、このクエリの結果を挿入します。

SELECT r1.*, o1.tid, o1.date, o1.cid FROM r r1
LEFT JOIN r r2 ON r1.id = r2.id AND r1.jid < r2.jid
JOIN o o1 ON r1.id = o1.pkey
WHERE r2.jid IS NULL

ここでフィドル。

PS:「最新のjid」は、あなたの例に基づいて、実際にはアルファベット順に並べられていることを理解しています。

于 2013-08-28T00:58:38.337 に答える