2013-08-28 63 views
-1

我有2個表這裏合併包含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 

表Ø

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

,我想創建由合併的新表的表o與表r,目的是通過使用id = pkey獲得tid,日期和cid信息,我希望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,任何解決方案將不勝感激。謝謝。

+0

熟悉常見連接。語法和示例見http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html。一旦你掙扎了一下,發佈你的嘗試,我們可以幫助! – xQbert

+0

謝謝你。我設法玩弄它並得到我想要的東西。謝謝! – user2709309

回答

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; 
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 

小提琴here

PS:請注意,「最新的JID」根據您的示例,我明白它實際上是按字母順序排列的。