0

假设我有如下两个表,其中表 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 中有重复的类型。我该如何解决这个问题?

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 表_2= 表 B

于 2013-06-08T07:28:05.573 回答