2016-09-29 46 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