在SQL Server中的JOIN表中自动增加主键

时间:2016-02-10 17:48:58

标签: sql-server join increment

我有一个现有的表Books,如下所示:

Book ISBN | Ranking | Price | Lent(true/false)

现在我想从Books创建一个新表格,但排名从1到20,排名依赖于排名。

所以新表将如下所示:

Ranking | Book ISBN | Price | Lent 

我希望这是有道理的,因为我试图抽象我正在为项目做的事情。我认为这类似于连接两个表以及在排名上设置的条件。一些样本数据:

书籍:

12345222 | 1 | $10 | FALSE
98001333 | 3 | $15 | TRUE
78899444 | 4 | $20 | FALSE 

新表:

1 | 12345222 | $10 | FALSE
2 | 00000000 | $0  | FALSE
3 | 98001333 | $15 | TRUE
4 | 78899444 | $20 | FALSE
5 | 00000000 | $0  | FALSE

...

还有其他更好的方法来创建这个新表吗?谢谢。

1 个答案:

答案 0 :(得分:1)

;
WITH    cte
          AS ( SELECT TOP 20
                        ranking = ROW_NUMBER() OVER ( ORDER BY c.name )
               FROM     sys.columns c
             )
    INSERT INTO newTable
    SELECT  cte.ranking
          , '00000000' AS ISBN
          , 0 AS price
          , 'FALSE' AS Lent
    FROM    cte
            LEFT JOIN Books b ON cte.ranking = b.ranking
    WHERE   b.ISBN IS NULL
    UNION ALL
    SELECT  ranking
          , ISBN
          , price
          , Lent
    FROM    books;