2016-02-10 68 views
0

我有一个现有的表Books这样的:自动递增的主键连接表中的SQL Server

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 

...

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

+0

什么意思是“从1到20的所有排列的全部范围”“书籍”中的“排名”字段是否包含值1到20,或者是否只想过滤具有'排名'的值为1到20?当你说你想要一个'New Table'时,你的意思是你想要一个结果集?在这里我没有看到需要自动增量,也不需要加入两张表,所以我不确定标题对这个问题的处理方式。也许如果你发布了一些示例表格数据和你正在寻找的结果样本将会更加清晰。 – JNevill

+0

现在,你已经解释了你的问题,我明白你想改变你的表的列顺序。虽然,我几乎肯定这不是你想要做的。请澄清。 –

+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;