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