IF OBJECT_ID('Tempdb..#TestTable') IS NOT NULL
DROP TABLE #TestTable;
CREATE TABLE #TestTable (Names VARCHAR(75), Random_No INT);
INSERT INTO #TestTable (Names,Random_No) VALUES
('Animal', 363)
,('Bat', 847)
,('Cat', 655)
,('Duet', 356)
,('Eagle', 136)
,('Frog', 784)
,('Ginger', 690);
SELECT Names,Random_No,ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS SERIAL_NO FROM #TestTable;
ALTER function dbo.FN_ReturnNumberRows(@Start int, @End int) returns @Numbers table (Number int) as
begin
insert into @Numbers
select n = ROW_NUMBER() OVER (ORDER BY n)+@Start-1 from (
select top (@End-@Start+1) 1 as n from information_schema.columns as A
cross join information_schema.columns as B
cross join information_schema.columns as C
cross join information_schema.columns as D
cross join information_schema.columns as E) X
return
end
GO
select * from dbo.FN_ReturnNumberRows(10,9999)
9条答案
按热度按时间9udxz4iz1#
有时候我们可能不想在结果集上应用排序来添加序列号,但是如果我们要使用
ROW_NUMBER()
,那么我们必须有一个ORDER BY
子句,因此,我们可以简单地应用一个技巧来避免在结果集上进行任何排序。为此,我们不需要对结果集应用order by,只需要在给定的结果集上添加
ItemNo
即可。neekobn82#
thigvfpy3#
我不确定,根据您的问题,如果您想要编号行,即使底层数据发生更改(并给出不同的排序),也会记住它们的编号,但如果您只想要编号行-在客户ID发生更改时重置,那么尝试使用row_number()的Partition by子句
ipakzgxi4#
实现序列号而不对任何列排序
演示SQL脚本-
在SQL Server中实现序列号的方法有“N”种。在此,我们提到了简单的Row_Number函数来生成序列号。
ROW_NUMBER()函数是窗口函数之一,它按顺序对所有行进行编号(例如1、2、3...)。它是一个临时值,将在查询运行时计算。它必须有一个带ORDER BY的OVER子句。因此,我们不能简单地省略ORDER BY子句。但我们可以使用如下语句-
SQL脚本
在上面的查询中,我们也可以使用SELECT 1、SELECT 'ABC'、SELECT“来代替SELECT NULL。结果相同。
brccelvz5#
yrdbyhpb6#
mu0hgdu07#
使用公用表表达式(CTE)
zf2sa74q8#
我发现了一个解决方案MYSQL它很容易添加新列的SrNo或一种热属性自动增量列以下查询:
guz6ccqo9#