Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql server中创建订单列_Sql_Sql Server_Calculated Columns - Fatal编程技术网

如何在sql server中创建订单列

如何在sql server中创建订单列,sql,sql-server,calculated-columns,Sql,Sql Server,Calculated Columns,我想要表格中每一行的订单信息。下面是我的桌子。ID列是标识及其主键。订单列是根据id列计算的 ID -- Name -- Order 1 kiwi 1 2 banana 2 3 apple 3 一切都很好,我有一个订单栏。但是我不能改变行的顺序。 例如,我不能说从现在起猕猴桃的顺序变成了2

我想要表格中每一行的订单信息。下面是我的桌子。ID列是标识及其主键。订单列是根据id列计算的

   ID     --      Name     --     Order
    1             kiwi              1
    2             banana            2
    3             apple             3
一切都很好,我有一个订单栏。但是我不能改变行的顺序。 例如,我不能说从现在起猕猴桃的顺序变成了2,香蕉的顺序变成了1 换句话说,如果我们更新一个计算列,那么我的问题就可以解决了

如果我不创建订单列作为计算列,那么对于每个新条目,我必须计算最大订单,这样我就可以为新条目的订单写(最大订单)+1。但我并没有计算每个条目的最大数量,因为它很昂贵

那我现在该怎么办


我已经搜索并找到了创建触发器函数等的解决方案。我也不想这样做

我可能不理解这个问题——我认为它不是很清楚

但是为什么要用计数器来对集合进行排序呢?难道你不能对每个顺序使用一个时间戳,并用它来指示哪个顺序是最近的吗

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

不清楚的是:“如果我们要更新一个计算列,那么我可以创建一个从ID列计算的订单列,我的问题就可以解决了。”这意味着什么?为什么您不能更新该
订单
-列?`is column'ID'标识??您可以根据您的姓名列获得下一个订单(最大订单)+1,或者从整个订单列中获得最大订单?@TimSchmelter订单列是计算列。所以我不能改变它。我已经编辑了我的question@KrishKvR是的,身份就是身份。这就是为什么订单不能是标识,如果我们可以在sql server中创建两个标识列,那么我的问题就可以解决了