SQL从两个表按升序插入表中

时间:2011-08-05 04:41:47

标签: sql sql-server

我需要创建一个映射两个表值的表。没有可用于连接这些表的键,但保证这两个表中的行数保证相同,并且一个中的最低ID值映射到其他表中的最低值一直到最高值。两个表中的实际ID本身会有所不同

有没有办法在SQL Server中执行此操作。

由于

3 个答案:

答案 0 :(得分:6)

在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

答案 1 :(得分:2)

你可以在你的情况下使用Dense_Rank功能。

e.g。

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]

它可以帮助你。

答案 2 :(得分:0)

如果(并且仅当)您知道两组ID均匀上升,例如两者都以一定的数字开始并且总是上升1,然后只选择@offset =最低的一个减去另一个的最低值。然后只需使用偏移量即可加入。