Генерировать количество строк, увеличиваясь на 10000 за строку - PullRequest
0 голосов
/ 21 октября 2019

Мне нужно вернуть сгенерированный идентификатор, где для каждой строки он увеличивается на 10 000.

Например, столбец ExpectedResult в приведенном ниже списке, и если будет больше строк, он будет увеличиваться на 10000 каждыйвремя.

Create Table #temp
(
    ID uniqueidentifier,
    ExpectedResult int
)
insert into #temp
(
    ID,
    ExpectedResult
)
select
    NEWID(),
    10000
union
select
    NEWID(),
    20000
union
select
    NEWID(),
    30000
union
select
    NEWID(),
    40000
union
select
    NEWID(),
    50000

select * from #temp
order by ExpectedResult

drop table #temp

Я нашел пример ниже, но я не уверен, как увеличить счет на 10000 каждый раз

ROW_NUMBER() OVER (ORDER BY (SELECT 100))

Ответы [ 5 ]

0 голосов
/ 21 октября 2019

Вы можете определить столбец как identity, чтобы сделать это для вас:

Create Table temp (
    ID uniqueidentifier,
    ExpectedResult int identity (10000, 10000)
);

insert into temp (ID)
    select v.id
    from (values (NEWID()), (NEWID()), (NEWID()), (NEWID()), (NEWID())) v(id);

Здесь - это скрипта db <>.

0 голосов
/ 21 октября 2019

Как предложил Ник в исходных комментариях к вопросу, сделали это:

ROW_NUMBER() OVER (ORDER BY (SELECT 100))*10000
0 голосов
/ 21 октября 2019

вы можете использовать cte для генерации N number для guids. Ниже приведен пример cte для генерации 100 строк для вашего guid.

Drop table #temp
Create Table #temp
(
    ID uniqueidentifier,
    ExpectedResult int
);

with cte as(
     select  newid() as new_id, 10000 as ctr
     union all 
     select new_id, ctr + 10000 from cte where ctr/10000 < 100
)
insert into #temp
select * from cte  option (MaxRecursion 0 );


select * from #temp;
0 голосов
/ 21 октября 2019

Вам нужно разделить ROW_NUMBER () на 10000, а затем умножить на 10000. Вы можете написать что-то вроде этого

select *, rowNum10K = 10000 * (1 + (row_number() over (order by object_id)) / 10000)
from #temp
0 голосов
/ 21 октября 2019

Если вы используете SQL Server 2012 или более позднюю версию (включая SQL Server 2017), вы можете создать последовательность нумерации, используя CREATE SEQUENCE. Чтобы создать SEQUENCE с шагом 10000, добавьте предложение INCREMENT BY.

Например:

CREATE SEQUENCE Test.CountBy1  
    START WITH 10000  
    INCREMENT BY 10000  

Для получения дополнительной информации, пожалуйста, обратитесь к документации SQL Server по CREATE SEQUENCE: https://docs.microsoft.com/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-2017

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...