2015-09-16 5 views
1

Вы можете использовать 1 или 2 последовательности.Использование последовательности. Две последовательности на одном столбце

Скажем, у меня есть таблица tblOrder и 2 колонки в ней, OrderID и Company. Я использую только две компании в своем столе: IBM и Airtel.

То, что я хочу, когда это Company = IBM затем OrderID вставки в 1 и когда компания Airtel, то он должен вставить OrderID в 1001 году и повторите шаги с шагом 1, то есть следующий OrderID для IBM должно быть 2 и Airtel должно быть 1002.

Думаю, мне нужно использовать две последовательности, на одной колонке с выражением case.

+1

Да, вам нужна одна последовательность для IBM, а вторая для Airtel - так в чем проблема? –

+0

Вы можете пойти с вычисленным столбцом, добавив 1000 к идентификатору вашей личности, если компания будет Airtel. Но, если честно, это пахнет плохим подходом ... – Shnugo

+0

Как связать 2 последовательности по 1 столбцу. Это проблема и как я могу ее обработать? Пожалуйста, дайте мне рабочий пример ... –

ответ

0

EDIT: больше идей: 1) У вас может быть VIEW с ROW_NUMBER() OVER(PARTITION BY Company ORDER BY OrderID). Это всегда будет обеспечивать минимальный пробег для каждой группы - но, возможно, не будет одинаковым в каждом вызове.

2) Используйте две отдельные таблицы, каждый с IDENTITY и объединить их с UNION

3) Используйте функцию, чтобы получить следующий идентификатор (в после запуска вставки?)

CREATE FUNCTION dbo.GetNextID(@Company VARCHAR(MAX)) 
RETURNS INT 
AS 
BEGIN 
    RETURN ISNULL((SELECT MAX(OrderID) FROM YourTable WHERE [email protected]) + 1,0); 
END 

Надежда это помогает ...

--old текст

Если последовательности не должны быть без пробелов, вы могли бы попробовать что-то вроде этого:

Существуют и другие подходы (например, используйте две разные таблицы и объедините их в UNION SELECT).

DECLARE @tbl TABLE (OrderID INT IDENTITY 
        ,Company VARCHAR(100) 
        ,ResolvedID AS CASE Company WHEN 'Airtel' THEN OrderID+1000 
               WHEN 'Something' THEN OrderID + 2000 
               ELSE OrderID END); 
INSERT INTO @tbl VALUES('Airtel') 
         ,('IBM') 
         ,('Something'); 

SELECT * FROM @tbl; 
+0

Следующий идентификатор при вставке Затем он должен вставляться последовательно. Средство ResolvedID должно 1001, затем 1002, а затем 1003 .... но orderid может быть любым, что мы не можем сказать OrderId + 1000, что будет неправильно. –

+0

@VishalMittal, где вам нужен этот идентификатор? Это, вообще говоря, плохая идея использовать идентификатор как меньше меньше номера (что происходит при удалении?). Я добавлю некоторые идеи в свой ответ ... – Shnugo