0

以下のように 2 つのテーブルがあるとします。テーブル A には名前と型の列があり、各名前は何度も異なる型で表示される可能性があり、テーブル B には一意のコード、名前、および合計があります。

表 A

John  Type1  
Mark  Type2  
John  Type1  
Mark  Type3  
John  Type4  
Paul  Type5

表 B

1  John  20  
2  Mark  33   
3  Paul  22  
4  Mark  55  
5  John  46  

今私が欲しいのは次のようなものです:

表 C

1  John  20  Type1  
2  Mark  33  Type2  
3  Paul  22 Type5  
4 Mark 55 Type2  
5 John 46 Type1  

通常、テーブル A には、名前ごとに 1 つのタイプを持つ一意のエントリが含まれている必要があり、名前でテーブル B を正しく結合して、必要なものを取得できます。しかし、正しい結合を行うと、テーブル A で name のタイプが重複しているため、テーブル C でエントリが重複します。これを解決するにはどうすればよいですか?

4

2 に答える 2

3

これを試して

WITH TableAA
AS
(
  SELECT ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY NAME,TYPE) RN
  ,name
  ,type
  FROM TableA
)

SELECT 
B.*
,(
  SELECT type from TableAA A WHERE A.name= B.name AND A.RN=
  ISNULL(NULLIF((SELECT COUNT(1) FROM TableB C WHERE C.NAME=B.name 
          and C.no < B.no),0),1)
  ) AS Type 

FROM   
TableB B

SQLFiddle デモ

于 2013-06-08T07:46:05.637 に答える
2

これを試すことができます:

SELECT A.*,B.TYPE  
  FROM dbo.TABLE_2  A RIGHT JOIN  
(
  SELECT DISTINCT(NAME),MIN(TYPE)TYPE 
    FROM TABLE_1 
   GROUP BY NAME
) B ON A.NAME=B.NAME 
 ORDER BY CODE ASC

TABLE_1= テーブル A TABLE_2= テーブル B

于 2013-06-08T07:28:05.573 に答える