Пользовательский автоматически сгенерированный столбец в SQL Server - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу сгенерировать уникальный PrescriptionNo для каждого из Prescription на основе shopid.

. Я пробовал следующим образом

id   PrescriptionNo   Shopid  Amount 
1    PRES001             2     100
2    PRES002             2     200
3    PRES001             1     100
4    PRES003             2     200
select top 1 'PRES' + right('000' + CAST(ROW_NUMBER() over (order by id) + 1 AS VARCHAR(3)),3)
  from prescription
 where shopid = 2
 order by id desc

1 Ответ

3 голосов
/ 01 ноября 2019

Попробуйте это:

create table #tmp1 (id int, prescriptionno varchar(10), shopid int, amount int);
insert into #tmp1 values (1,'PRES001',2,100);
insert into #tmp1 values (2,'PRES002',2,200);
insert into #tmp1 values (3,'PRES001',1,100);
insert into #tmp1 values (4,'PRES003',2,200);

select 'PRES' + RIGHT(concat('000',ISNULL(max(right(prescriptionNo,3)),0)+1),3)
from #tmp1
where shopid = 3

=> Returns 'PRES0001'

select 'PRES' + RIGHT(concat('000',ISNULL(max(right(prescriptionNo,3)),0)+1),3)
from #tmp1
where shopid = 2

==> Returns 'PRES0004'

Использование только max () позволяет использовать ISNULL (.., 0).

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