如何在sql server中创建一个订单列

时间:2014-11-14 09:21:49

标签: sql sql-server calculated-columns

我想要一张表格中每一行的订单信息。以下是我的表格。 ID列是标识及其主键。 Order列是从id列计算的。

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

一切都很好,我有一个订单栏。但是我无法切换行的顺序。 例如,我不能说从现在开始,奇异果的订单变为2,香蕉的订单变为1 换句话说,如果我们要更新计算列,那么我的问题就可以解决了。

如果我不创建订单列作为计算列,那么对于每个新条目,我必须计算最大订单,以便我可以为新条目的订单写入(最大订单)+ 1。但是我不计算每个条目的最大数字,因为它很昂贵。

那我该怎么办呢?

我搜索了解决方案并找到了创建触发功能等的解决方案。我也不想这样做。

1 个答案:

答案 0 :(得分: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