我需要创建映射两个表值的表。没有可用于连接这些表的键,但可以保证这两个表中的行数保证相同,并且一个中的最低ID值映射到另一个中最低的值。实际ID本身在两个表中是不同的将SQL从两个表中按升序插入到表中
有没有办法在SQL Server中执行此操作。
感谢
我需要创建映射两个表值的表。没有可用于连接这些表的键,但可以保证这两个表中的行数保证相同,并且一个中的最低ID值映射到另一个中最低的值。实际ID本身在两个表中是不同的将SQL从两个表中按升序插入到表中
有没有办法在SQL Server中执行此操作。
感谢
在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
您可以使用DENSE_RANK函数在你的情况。
例如
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]
它可能会帮助你。
如果(并且只有)你知道两组ID均匀地上升,例如,都从一定的数字开始,总是增加1,然后只选择@offset =最低的一个减去其他的最低。然后只需使用偏移量即可加入。