将自动递增的列添加到 SELECT 起始编号
Add Auto Incremented Column to SELECT With Starting Number
我在 SQL 服务器 12
我正在尝试导入一堆订单。我需要从系统中获取最后一个订单号,并在那里开始进口编号。
到目前为止我有以下内容:
DECLARE
@maxOrders int
SELECT @maxOrders= MAX(order_number) FROM orders WHERE balance <> 0
我有一个相当大的 select 语句,其中包含多个连接和位置。我在 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 添加到其中。
感谢任何帮助!
下面是一个例子。我复制了 row_number 逻辑,这样您就可以看到它计算出的值以及如何将 "base 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;
我在 SQL 服务器 12
我正在尝试导入一堆订单。我需要从系统中获取最后一个订单号,并在那里开始进口编号。
到目前为止我有以下内容:
DECLARE
@maxOrders int
SELECT @maxOrders= MAX(order_number) FROM orders WHERE balance <> 0
我有一个相当大的 select 语句,其中包含多个连接和位置。我在 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 添加到其中。
感谢任何帮助!
下面是一个例子。我复制了 row_number 逻辑,这样您就可以看到它计算出的值以及如何将 "base 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;