加入表格

时间:2013-06-08 06:59:21

标签: sql join duplicates

假设我有两个表,如下表所示,其中表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应该包含每个名称只有一种类型的唯一条目,我可以在名称上正确连接表B以获得我想要的内容。但是现在,如果我做正确的连接,我会在表C中获得重复的条目,因为表A中的名称有重复的类型。如何解决这个问题?

2 个答案:

答案 0 :(得分: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 Demo

答案 1 :(得分: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