-1

2つのSQLクエリがあるとしましょう。表Aには、

ID
--
1
1
1
2
3
4

このクエリ、

Select distinct ID1 FROM A

私に与える、

ID
--
1
2
3
4

二つ目

Select ID2 FROM B

それは私に、

ID2
--
8
21
33
43

このレコードセットを取得するにはどうすればよいですか?

ID1  ID2
---  ---
 1    8
 2    21
 3    33
 4    43
4

1 に答える 1

5

SQL Serverのバージョンを指定しませんでしたが、SQL Server 2008+を使用している場合、これを行う1つの方法は、row_number()各テーブルにを追加してからrow_number():に参加することです。

select a.id, b.id2
from
(
  select id, row_number() over(order by id) rn
  from a
) a
inner join
(
  select id2, row_number() over(order by id2) rn
  from b
) b
  on a.rn = b.rn

SQL FiddlewithDemoを参照してください

値のみを使用するDISTINCT場合は、次を使用できるはずです。

select a.id, b.id2
from
(
  select id, row_number() over(order by id) rn
  from
  (
    select distinct id
    from a
  ) a
) a
inner join
(
  select id2, row_number() over(order by id2) rn
  from b
) b
  on a.rn = b.rn;

SQL FiddlewithDemoを参照してください

各テーブルの行数が異なる場合は、FULL OUTER JOIN:を使用することをお勧めします。

select a.id, b.id2
from
(
  select id, row_number() over(order by id) rn
  from
  (
    select distinct id
    from a
  ) a
) a
full outer join
(
  select id2, row_number() over(order by id2) rn
  from b
) b
  on a.rn = b.rn;

SQL FiddlewithDemoを参照してください

于 2013-01-08T13:52:59.007 に答える