Добавить автоинкрементный столбец в SELECT с начальным номером - PullRequest
0 голосов
/ 27 февраля 2019

Я на SQL Server 12

Я пытаюсь импортировать несколько заказов.Мне нужно получить последний порядковый номер из системы и начать там нумерацию импорта.

Пока у меня есть следующее:

DECLARE
@maxOrders int

SELECT @maxOrders= MAX(order_number) FROM orders WHERE balance <> 0

У меня довольно большой оператор выбора с несколькимиприсоединяется и где.На SO я нашел несколько примеров использования ROW_NUMBER () для увеличения, но я не понимаю часть OVER.

Мой SELECT выглядит примерно так:

SELECT
    (@maxOrders+ROW_NUMBER()) AS Order_number,
    'Company' AS Company_Name
    Three
    Four
    ...
    TwentyFive
    '$' AS Currency
FROM other_order
    left join bla bla on bla bla
    left join bla bla on bla bla
    left join bla bla on bla bla
WHERE 
    this=that
    that is null
    this is not null
ORDER BY po_number

НадеюсьЯ не получил ПРАВИЛЬНУЮ часть, где ее разместить и т. д., поэтому я даже не пытался узнать, смогу ли я добавить к ней @maxOrders.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 27 февраля 2019

Ниже приведен пример.Я продублировал логику row_number, чтобы вы могли увидеть значение, которое она вычисляет, а затем узнать, как добавить к нему «базовый номер».Этот случай очень прост, но не настолько интуитивен в коде, потому что первоначальная цель (предполагаемая здесь) функции состояла в том, чтобы сгенерировать последовательность на основе определенного порядка строк.Я предполагаю, что вас не волнует порядок строк - поэтому часть «select 1» действует как константа в логике упорядочения (что означает порядок строк - и присвоение значения каждой строке - этоне определено).

use tempdb;
set nocount on;
go

declare @startnum smallint = 55;
declare @import table (id smallint not null, descript varchar(20) not null);
insert @import (id, descript) values (22, 'zork'), (23, 'pocket'), (11, 'lint'), (101, 'chacha');

select * from @import;

select id, descript, 
  row_number() over (order by (select 1)) as row_num, 
  @startnum + row_number() over (order by (select 1)) as order_number 
from @import
order by order_number; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...