SQl server duplicate joins issue with different elements

跟風遠走 提交于 2019-12-13 07:56:03

问题


Sorry, I am posting again with one more requirement.

can anyone please help: I tried to join with duplicate values but it is not coming as I wanted.

DROP TABLE IF EXISTS #TestTable1
DROP TABLE IF EXISTS #TestTable2

CREATE TABLE #TestTable1 ([No] varchar(50),[Value1] float,[Desc] varchar(50))
insert into #TestTable1 ([No],[Value1],[Desc])
Values 
 (N'123953',300.02,N'Extra Pay')
,(N'123953',427.2,N'Basic Hours')
,(N'123953',106.8,N'Basic Hours')
,(N'123953',213.6,N'Basic Hours')
,(N'123953',213.6,N'Basic Hours')
,(N'123953',213.6,N'Basic Hours')
,(N'123953',213.6,N'Basic Hours')
,(N'123953',105.6,N'Basic Hours')


CREATE TABLE #TestTable2 ([No] varchar(50),[Value2] float,[Desc] varchar(50))
insert into #TestTable2 ([No],[Value2],[Desc])
Values 
 (N'123953',200.02,N'Extra Pay')
,(N'123953',553.02,N'Basic Hours')
,(N'123953',446.67,N'Basic Hours')
,(N'123953',427.2,N'Basic Hours')
,(N'123953',106.8,N'Basic Hours')
,(N'123953',213.6,N'Basic Hours')
,(N'123953',213.6,N'Basic Hours')
,(N'123953',213.6,N'Basic Hours')
,(N'123953',105.6,N'Basic Hours')

Desired Output:

[No],[Desc],[Value1],[Value2],[MatchResult]


,(N'123953',N'Extra Pay',300.02,200.02, False)
,(N'123953',N'Basic Hours',427.2,427.2, True)
,(N'123953',N'Basic Hours',106.8,106.8, True)
,(N'123953',N'Basic Hours',213.6,213.6, True)
,(N'123953',N'Basic Hours',213.6,213.6, True)
,(N'123953',N'Basic Hours',213.6,213.6, True)
,(N'123953',N'Basic Hours',213.6,NULL,NULL)
,(N'123953',N'Basic Hours',105.6,105.6, True)

回答1:


--it looks to me like you should be able to force row_numbers onto duplicate rows, and therfore achieve a one-to-one join, leaving no match on the right as null

SELECT Q1.No, Q1.[desc], Q1.[value1],q2.[value2] FROM 

 (SELECT [NO] , 
            value1, 
            [desc], 
            ROW_NUMBER() over(partition by [NO] , value1, [desc] order by [no]) RN 
                FROM #TestTable1
  ) Q1

 LEFT JOIN

 (SELECT [NO] , 
            value2, 
            [desc], 
            ROW_NUMBER() over(partition by [NO] , value2, [desc] order by [no]) RN 
                FROM #TestTable2
  ) Q2

 ON Q1.Value1=Q2.Value2 AND 
        Q1.[No] = Q2.[NO] AND 
            Q1.[desc] = Q2.[Desc] AND 
                Q1.RN = Q2.rn


来源:https://stackoverflow.com/questions/53416582/sql-server-duplicate-joins-issue-with-different-elements

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!