0

私は2つのテーブルを持っています。

表1:

Id     Name

1      John
2      Mike
3      Sam

表 2:

Name   Data

John   Data1
John   Data1
John   Data1
Mike   Data2
Mike   Data2
Sam    Data3

私が書いたら

select Table2.Name, Table2.Data 
from Table1 
inner join Table2 on Table1.Name= Table2.Name

すべての重複データを取得します。

次のようなものを取得できるようにしたいと思います。

John Data1
Mike Data2
Sam  Data3
4

4 に答える 4

1

You can use CTE for this and apply a row_number()

;with cte as
(
  select t1.name, t2.data,
    row_number() over(partition by t1.id order by t1.id) rn
  from table1 t1
  inner join table2 t2
    on t1.name = t2.name
)
select *
from cte
where rn = 1

Or a non-CTE version:

select *
from 
(
  select t1.name, t2.data,
    row_number() over(partition by t1.id order by t1.id) rn
  from table1 t1
  inner join table2 t2
    on t1.name = t2.name
) x
where rn = 1

see SQL Fiddle with Demo

于 2012-09-24T11:55:56.167 に答える
1
SELECT DISTINCT NAME
     , DATA
  FROM Table2
 WHERE NAME IN (SELECT NAME
                  FROM Table1)

ここにはいくつかの異なるオプションがあります...

于 2012-09-23T20:59:06.883 に答える
1

これには 2 つの方法があります。

distinct次の句を使用できます。

select distinct t2.Name, t2.Data 
from Table1 t1
inner join Table2 t2 on t1.Name= t2.Name

ここにMSDNへのリンクがあります。

使用できますgroup by

select t2.Name, t2.Data 
from Table1 t1
inner join Table2 t2 on t1.Name= t2.Name
group by t2.Name, t2.Data 

ここにMSDNへのリンクがあります。

いつでもグループ化機能を追加できるため、2番目のソリューションを好みます。

注: 両方のクエリでエイリアス ( t1, t2) を使用しました。それはより読みやすいです。

于 2012-09-23T20:56:02.497 に答える
0

次のようなものを探していますか?

select Table2.Name, Table2.Data, count(*) from Table1 
     inner join Table2 on Table1.Name= Table2.Name
     group by Table2.Name, Table2.Data;
于 2012-09-23T20:48:29.393 に答える