我需要創建映射兩個表值的表。沒有可用於連接這些表的鍵,但可以保證這兩個表中的行數保證相同,並且一箇中的最低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 =最低的一個減去其他的最低。然後只需使用偏移量即可加入。