2013-01-08 33 views
0

我目前有2個表格,其中包含有關項目的信息。第一個表顯示了不同的名字對於一個給定貨號:從2個表加入信息

Item No Name 
1   Name1 
1   Name2 
1   Name3 

第二個表顯示給定項目沒有不同的位置:

Item No Location 
1  Location1 
1  Location2 

我目前使用下面的語句加入這些2表

Select * 
from FirstTable a 
Left Join 
(
    Select * 
    from SecondTable 
) b 
    on a.itemno = b.itemno 

我結束了這樣的數據:

Item No Name  Location 
1   Name1  Location1 
1   Name1  Location2 
1   Name2  Location1 
1   Name2  Location2 
1   Name3  Location1 
1   Name3  Location2 

我想直到結束是這樣的:

Item No Name  Location 
1   Name1  Location1 
1   Name2  Location2 
1   Name3  NULL 

我如何能實現我在尋找的結果?

+0

所有項目都同樣沒有'1'。這是對的嗎?我想這是標識符,不是嗎? –

+1

第一張表中的行應該如何與第二張中的行關聯?表格行沒有隱式排序,所以您需要爲聯接應用一些明確的排序。 –

+0

是「Item No」主鍵? – DmitryK

回答

1

如何使用這樣的東西。這就賦予通用row_number()到表中的每個值,然後你加入該行數值:

select i.[item no], 
    i.name, 
    l.location 
from 
(
    select [item no], name, 
    row_number() over(partition by [item no] order by name) rn 
    from item 
) i 
full outer join 
(
    select [item no], location, 
    row_number() over(partition by [item no] order by location) rn 
    from locations 
) l 
    on i.rn = l.rn 

SQL Fiddle with Demo

結果從樣本數據是:

| ITEM NO | NAME | LOCATION | 
------------------------------- 
|  1 | Name1 | Location1 | 
|  1 | Name2 | Location2 | 
|  1 | Name3 | (null) | 
+0

我會試試這個解決方案,並讓你知道它是如何發展的。 –