SQL 用于递增的服务器或 SSIS 代码
SQL Server or SSIS code for incrementing
输入
ID
12345
12346
12346
12387
12568
12387
12387
输出
ID - Value
12345 - 1
12346 - 2
12346 - 2
12387 - 3
12568 - 4
12387 - 5
12387 - 5
我有一个如上所示的输入,我还需要显示一个输出。
所以看一下,输出应该是这样的,如果前一个值与当前值相同,则值不应该发生变化,而如果值发生变化,则该值应该递增。
第一个值是默认值“1”。
是否可以在 SQL server 2008 及更高版本中写入?
这个有什么特殊功能吗??
我们可以在 SSIS 中编写相同的代码吗?
哪一个容易完成?
在 SQL Server 08 及更高版本中,您可以使用
轻松完成此操作
SELECT Id,
DENSE_RANK() OVER (ORDER BY Id)
FROM Table
如果性能不是关键约束,请使用此
declare @Id as int, @Rownumber as int = 0
declare @tempTable table (Id int, Rownumber int)
declare tempCur cursor for
select Id from yourtable
OPEN tempCur
FETCH NEXT FROM tempCur
INTO @Id
WHILE (@@FETCH_STATUS=0)
begin
declare @tempId as int
select @tempId=id from @tempTable where Rownumber=(select max(Rownumber) from @tempTable)
if (@tempId = @Id)
insert into @tempTable select @Id,@Rownumber
else
begin
set @Rownumber = @Rownumber+1
insert into @tempTable select @Id,@Rownumber
end
FETCH NEXT FROM tempCur
INTO @Id
end
select * from @tempTable
CLOSE tempCur
DEALLOCATE tempCur
供您参考:
输入
ID
12345
12346
12346
12387
12568
12387
12387
输出
ID - Value
12345 - 1
12346 - 2
12346 - 2
12387 - 3
12568 - 4
12387 - 5
12387 - 5
我有一个如上所示的输入,我还需要显示一个输出。
所以看一下,输出应该是这样的,如果前一个值与当前值相同,则值不应该发生变化,而如果值发生变化,则该值应该递增。 第一个值是默认值“1”。
是否可以在 SQL server 2008 及更高版本中写入? 这个有什么特殊功能吗??
我们可以在 SSIS 中编写相同的代码吗? 哪一个容易完成?
在 SQL Server 08 及更高版本中,您可以使用
轻松完成此操作SELECT Id,
DENSE_RANK() OVER (ORDER BY Id)
FROM Table
如果性能不是关键约束,请使用此
declare @Id as int, @Rownumber as int = 0
declare @tempTable table (Id int, Rownumber int)
declare tempCur cursor for
select Id from yourtable
OPEN tempCur
FETCH NEXT FROM tempCur
INTO @Id
WHILE (@@FETCH_STATUS=0)
begin
declare @tempId as int
select @tempId=id from @tempTable where Rownumber=(select max(Rownumber) from @tempTable)
if (@tempId = @Id)
insert into @tempTable select @Id,@Rownumber
else
begin
set @Rownumber = @Rownumber+1
insert into @tempTable select @Id,@Rownumber
end
FETCH NEXT FROM tempCur
INTO @Id
end
select * from @tempTable
CLOSE tempCur
DEALLOCATE tempCur
供您参考: