SQL à insert dans la table à partir de deux tables dans l'ordre croissant

J'ai besoin de créer une table qui mappe deux valeurs de table. Il n'y a pas de keys qui peuvent être utilisées pour joindre ces tables, mais il est garanti que le nombre de lignes dans ces deux tables sera le même et la valeur d'ID la plus faible dans l'une correspondra au plus bas dans l'autre. L'identifiant réel lui-même sera différent dans les deux tables

Est-il un moyen de le faire dans SQL Server.

Merci

Dans SQL Server 2005+:

WITH Table1Ranked AS ( SELECT ID, rn = ROW_NUMBER() OVER (ORDER BY ID) FROM Table1 ), Table2Ranked AS ( SELECT ID, rn = ROW_NUMBER() OVER (ORDER BY ID) FROM Table2 ) INSERT INTO MapTable (Table1ID, Table2ID) SELECT t1.ID, t2.ID FROM Table1Ranked t1 INNER JOIN Table2Ranked t2 ON t1.rn = t2.rn 

Vous pouvez utiliser la fonction Dense_Rank dans votre cas.

par exemple

 CREATE TABLE Table1 ( ID INT, NAME VARCHAR(10) ) CREATE TABLE Table2 ( ID INT, NAME VARCHAR(10) ) INSERT INTO Table1 SELECT 1, 'abc' UNION SELECT 2, 'def' INSERT INTO Table2 SELECT 3, 'abc' UNION SELECT 4, 'def' SELECT tbl1.ID AS [ID1] , tbl1.NAME AS [Name1] , tbl2.ID AS [ID2] , tbl2.NAME AS [Name2] FROM ( SELECT ID, NAME , DENSE_RANK() OVER (ORDER BY ID) AS [Rank] FROM Table1 ) as tbl1 INNER JOIN ( SELECT ID, NAME , DENSE_RANK() OVER (ORDER BY ID) AS [Rank] FROM Table2 ) as tbl2 ON tbl1.[Rank] = tbl2.[Rank] 

Cela peut vous aider.

Si (et seulement si) vous savez que les deux sets d'ID augmentent uniformément, par exemple tous les deux commencent à un certain nombre et montent toujours de 1, alors select simplement @offset = le plus bas dans un less le plus bas dans l'autre. Ensuite, utilisez simplement l'offset pour join.