2014-11-14 2 views
-2

Я хочу информацию о заказе для каждой строки в моей таблице. следующая моя таблица. Идентификатор - это идентификатор и его первичный ключ. Столбец заказа вычисляется из столбца id.Как создать столбец заказа в sql-сервере

ID  --  Name  --  Order 
    1    kiwi    1 
    2    banana   2 
    3    apple    3 

все в порядке, и у меня есть колонка заказа. Но я не могу переключать порядки строк. например, я не могу сказать, что отныне заказ киви становится 2, и порядок банана становится 1 , другими словами, если бы мы обновили вычисленный столбец, тогда моя проблема могла быть решена.

Если я не создаю столбец заказа в качестве вычисленного столбца, то для каждой новой записи я должен вычислить наибольший порядок, чтобы я мог написать (самый большой заказ) + 1 для заказа новой записи. Но я не рассчитываю наибольшее количество для каждой записи, поскольку это дорого.

Итак, что мне теперь делать?

Я искал и нашел решения, которые создали функцию запуска триггера и т. Д. Я тоже не хочу этого делать.

+0

Это не ясно: _ «если бы обновить вычисляемый столбец, то я мог бы создать столбец порядка, вычисленные из ID столбца и моя проблема может быть решена.» _ Что это значит? Почему вы не можете обновить этот 'order'-column?' –

+0

- это идентификатор столбца ID? –

+0

вы получаете следующий заказ как (самый большой заказ) + 1 AS за ваше имя Столбец ИЛИ получите самый большой заказ из целого столбца заказа? –

ответ

2

Возможно, я не понял этого вопроса - я не думаю, что его очень ясно.

но зачем использовать счетчик для заказа набора, не могли бы вы использовать временную метку для каждого заказа и использовать это, чтобы диктовать, какой заказ является более поздним?

CREATE TABLE dbo.Test (
         ID INT IDENTITY(1,1), 
         Name varchar(50), 
         OrderTime Datetime 
        ) 

INSERT INTO dbo.TEST (Name,OrderTime) 
VALUES ('kiwi',Getdate()) 

SELECT * 
FROM dbo.TEST 
ORDER BY OrderTime 

Если вам нужно целое число в зависимости от времени заказа, вы можете использовать функцию rownumber для возврата;

SELECT *, 
     ROW_NUMBER() OVER (ORDER BY OrderTime Desc) as OrderInt 
FROM dbo.TEST 
Смежные вопросы