2016-03-21 3 views
1

У меня есть эта таблица:Пользовательский идентификатор столбца в SQL Server

ID  ORDER SCNID SCANNER 
------------------------------- 
170842 85986 20  APL-1 
170843 85986 20  APL-1 
170844 85986 20  APL-1 
170845 85986 20  APL-1 
170886 86004 200  GPL-2 
170897 86011 1600 MAP-1 
170900 86011 1600 MAP-1 
170903 86011 1600 MAP-1 
170904 86011 1600 MAP-1 
170906 86011 1600 MAP-1 
170908 86011 1600 MAP-1 
170909 86011 1600 MAP-1 
170918 86024 520  NIX-3 
170922 86028 1050 OPL-3 
170923 86029 1050 OPL-3 

мне нужно сделать customorderID столбец, для которого она будет выглядеть следующим образом:

ID  ORDER SCNID SCANNER CUSORDERID 
-------------------------------------------- 
170842 85986 20  APL-1 85986-1 
170843 85986 20  APL-1 85986-2 
170844 85986 20  APL-1 85986-3 
170845 85986 20  APL-1 85986-4 
170886 86004 200  GPL-2 86004-1 
170897 86011 1600 MAP-1 86011-1 
170900 85986 1600 MAP-1 85986-5 
170903 86011 1600 MAP-1 86011-2 
170904 86011 1600 MAP-1 86011-3 
170906 86011 1600 MAP-1 86011-4 
170908 86011 1600 MAP-1 86011-5 
170909 86011 1600 MAP-1 86011-6 
170918 86024 520  NIX-3 86024-1 
170922 86028 1050 OPL-3 86028-1 
170923 86029 1050 OPL-3 86029-1  

Строки сортируются по ID & в соответствии с идентификатором 1-я запись для экземпляра ORDER (например, 86011) пользовательский ORDERID будет 86011-1, если для этого ЗАКАЗА имеются другие записи, то это будет 86011-2 и так далее.

Может ли кто-нибудь мне помочь?

+1

У вас уже есть поле порядка, какой-либо причине вы не можете использовать последовательность при запросе придумать добавлении на лету, а не хранить его? Обычно это предпочтительнее, если у вас есть какая-то дата/время для ее сортировки. Ссылка здесь: http://stackoverflow.com/questions/14359749/how-to-return-a-incremental-group-number-per-group-in-sql – jleach

+0

Мне нужен CUSTOMODER CULUMN, который будет выглядеть следующим образом. , –

+0

Что произойдет, если у вас есть '86011-1',' 86011-2' и '86011-3', а кто-то удаляет строку' 86011-2'? Должен ли '86011-3' перенумеровать? Если нет, должна ли следующая строка стать «86011-2» или «86011-4»? –

ответ

1

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

with tempOrder as 
(
    select ID,[ORDER],SCNID,Scanner, ROW_NUMBER() over (partition by [ORDER] order by [ORDER], ID) as OrderNum 
    from OrderTable 
) 
Select Id,[Order],SCNID,Scanner, Str([ORDER]) +'-'+ Str(OrderNum) as CUSORDERID from tempOrder 
order by [ORDER] 
+0

Спасибо! Я только что изменил инструкцию select из CTE. Для точного вывода. Выберите [Order], CONVERT (VARCHAR, ([ORDER])) + '-' + CONVERT (VARCHAR, (CUSTOrderNum)) как CUSORDERID от tempOrder заказать по [ORDER] –

+0

@SouravMukherjee Это не будет обрабатывать удаленные элементы и заполнение пробелов в соответствии с вашими требованиями в комментариях к вопросу. – jleach

Смежные вопросы