#sql #sql-server #sql-server-2008 #row-number
#sql #sql-server #sql-server-2008 #строка-номер
Вопрос:
У меня есть две таблицы: Клиент ——>> Отгрузка
Я хочу присвоить каждой отправке уникальный номер для каждого клиента, например
CustomerID ShipmentID ShipmnetNumber
10 50 1
10 51 2
10 55 3
15 56 1
15 57 2
15 58 3
17 59 1
17 60 2
и т.д…
как я могу это сделать в sql server 2008
Комментарии:
1. Вы говорите о сохранении этого
ShipmentNumber
столбца? Если это так, на самом деле нет хорошего способа сделать это в SQL Server. Вставки должны определять текущий разделMax
и блокировать другие одновременные вставки в тот же раздел и т. Д.2. Разве это не может быть сделано даже с помощью (With statement ) ???
3. Это можно сделать прямо как
SELECT
сROW_NUMBER
помощью, ноShipmentNumber
со временем это не будет стабильным, если у вас когда-либо будут удаления. Пожалуйста, объясните, что вы пытаетесь сделать здесь (мотивация)4. Хорошо, я собираюсь сохранить его, но как я могу это сделать?
5. Первоначальная настройка прямолинейна в соответствии с ответом Микаэля, но поддерживать ее в актуальном состоянии — это боль.
Ответ №1:
Чтобы получить нумерацию с помощью запроса, вы можете сделать это
select CustomerID,
ShipmentID,
row_number() over(partition by Shipment.CustomerID
order by ShipmentID) as ShipmentNumber
from Shipment
Если вы хотите обновить таблицу с помощью ShipmentNumber (недавно добавленный столбец), вы можете сделать это
;with S as
(
select ShipmentNumber,
row_number() over(partition by Shipment.CustomerID
order by ShipmentID) as ShipNum
from Shipment
)
update S
set ShipmentNumber = ShipNum