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

ли вы просто пытаетесь упорядочить строку или вы пытаетесь упорядочить строку с максимальным значением идентификатора? почему вы не можете использовать столбец «identity» для идентификатора? – Ravi

+0

Поскольку столбец идентификатора не является идентификатором (да, не спрашивайте меня ...), я хочу иметь восходящие идентификаторы, начиная с 1 после существующего максимума. –

ответ

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 
Смежные вопросы