【问题标题】:Add Auto Incremented Column to SELECT With Starting Number使用起始编号将自动递增列添加到 SELECT
【发布时间】:2019-02-27 01:18:38
【问题描述】:

我使用的是 SQL Server 12

我正在尝试导入一堆订单。我需要从系统中获取最后一个订单号,并在那里开始进口编号。

到目前为止,我有以下内容:

DECLARE
@maxOrders int

SELECT @maxOrders= MAX(order_number) FROM orders WHERE balance <> 0

我有一个相当大的 select 语句,其中包含多个连接和 where。我在 SO 上找到了一堆关于使用 ROW_NUMBER() 递增的示例,但我不明白 OVER 部分。

我的 SELECT 看起来像这样:

SELECT
    (@maxOrders+ROW_NUMBER()) AS Order_number,
    'Company' AS Company_Name
    Three
    Four
    ...
    TwentyFive
    '$' AS Currency
FROM other_order
    left join bla bla on bla bla
    left join bla bla on bla bla
    left join bla bla on bla bla
WHERE 
    this=that
    that is null
    this is not null
ORDER BY po_number

我不知道 OVER 部分,放在哪里等,所以我什至没有尝试查看是否可以将 @maxOrders 添加到它。

感谢任何帮助!

【问题讨论】:

    标签: sql sql-server select auto-increment


    【解决方案1】:

    下面是一个例子。我已经复制了 row_number 逻辑,这样您就可以看到它计算的值以及如何将“基数”添加到它。这种情况非常简单,但在代码中并不那么直观,因为该函数的原始目标(在这里猜测)是根据特定的行顺序生成一个序列。我猜你不关心行的顺序 - 所以“select 1”部分在排序逻辑中充当一个常量(这意味着行的顺序 - 以及为每一行分配一个值 - 是不明确的)。

    use tempdb;
    set nocount on;
    go
    
    declare @startnum smallint = 55;
    declare @import table (id smallint not null, descript varchar(20) not null);
    insert @import (id, descript) values (22, 'zork'), (23, 'pocket'), (11, 'lint'), (101, 'chacha');
    
    select * from @import;
    
    select id, descript, 
      row_number() over (order by (select 1)) as row_num, 
      @startnum + row_number() over (order by (select 1)) as order_number 
    from @import
    order by order_number; 
    

    【讨论】:

    • 我离得太近了!结束的订单让我失望。
    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2012-02-04
    • 1970-01-01
    • 2015-08-17
    相关资源
    最近更新 更多