【问题标题】:how to create an order column in sql server如何在sql server中创建订单列
【发布时间】:2014-11-14 09:21:48
【问题描述】:

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

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

一切都很好,我有一个订单列。但我不能切换行的顺序。 例如,我不能说从现在开始 kiwi 的订单变成 2,banana 的订单变成 1 换句话说,如果我们更新一个计算列,那么我的问题就可以解决了。

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

那我现在该怎么办?

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

【问题讨论】:

  • 不清楚:“如果我们要更新一个计算列,那么我可以创建从 ID 列计算的订单列,我的问题就可以解决了。” 这是什么意思?为什么不能更新order-column?`
  • 是列'ID' IDENTITY ??
  • 您获得下一个订单为(最大订单)+ 1 AS 每个您的名称列或从整个订单列获得最大订单?
  • @TimSchmelter 订单列是计算列。所以我不能改变它。我已经编辑了我的问题
  • @KrishKvR 是的 ID 是身份。这就是为什么订单不能是身份,如果我们可以在 sql server 中创建两个身份列,那么一切都可以解决我的问题

标签: sql sql-server calculated-columns


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多