2016-09-29 49 views
1

我想选择要插入的行并需要升序ID - 如何?选择升序ID

INSERT INTO myTable (ID, ColA, ColB) 
SELECT (SELECT max(ID) + 1 FROM myTable), colA, colB FROM myOtherTable 

不幸的是,这会导致:

5, 'a1', 'b1' 
5, 'a2', 'b2' 
5, 'a3', 'b3' 

我需要有

5, ... 
6, ... 
7, ... 

有一些常数我可以用它代替+1有一个上升的ID?喜欢的东西[email protected] ...

+0

无论您是仅尝试排序行还是尝试按最大ID值排序行?为什么你不能使用'身份证'作为ID列? – Ravi

+0

因为ID列没有身份(是的,不要问我...),我想在现有的最大值之后有从1开始的升序ID。 –

回答

0

你可以尝试这样的,简单得多

SELECT (select MAX(ID) from table1)+row_number() OVER (ORDER BY col1, col2) ID, 
     col1, 
     col2 
    FROM table1 
+0

比我自己的解决方案更简单,很好。 –

0
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS IDSEQ 
+0

关闭,看我的答案。 –

+0

仍然提高了你的答案,因为它指出我正确的方向。不知道是谁低估了你。 –

0

求最大值,我们可以增加值

Declare @i int; 

    DECLARE @TABLEA TABLE (PK INT,custno VARCHAR(10),cno VARCHAR(10)) 

    DECLARE @TABLEB TABLE (PK INT,custno VARCHAR(10),cno VARCHAR(10)) 

    INSERT INTO @TABLEB (PK,custno,cno) VALUES (5,'a1','b1'),(5,'a2','b2'),(5,'a3','b3') 
    Select @i = max(pk) from @TABLEB; 

    INSERT INTO @TABLEA (PK, custno,cno) 
    Select @i + ROW_NUMBER() over(order by custno) , CustNo,cno 
    FROM @TABLEB 

    SELECT * FROM @TABLEA 

    SELECT * FROM @TABLEB 
0

我不得不去适应jimmy8ball的答案(删除PARTITION BY部分使其工作):

INSERT INTO myTable (ID, ColA, ColB) 
SELECT (SELECT max(ID) FROM myTable) + x.rownum, x.colA, x.colB 
FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID) FROM myOtherTable) x