0

現在、アイテムに関する情報を保持する 2 つのテーブルがあります。最初の表は、特定のアイテム番号のさまざまな名前を示しています。

Item No   Name
1         Name1
1         Name2
1         Name3

2 番目の表は、指定された項目番号のさまざまな場所を示しています。

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

求めている結果を得るにはどうすればよいですか?

4

1 に答える 1

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 FiddlewithDemoを参照してください

サンプルデータの結果は次のとおりです。

| ITEM NO |  NAME |  LOCATION |
-------------------------------
|       1 | Name1 | Location1 |
|       1 | Name2 | Location2 |
|       1 | Name3 |    (null) |
于 2013-01-08T22:47:23.110 に答える