回答

收藏

按顺序编号分组

技术问答 技术问答 198 人阅读 | 0 人回复 | 2023-09-13

我有一些这样的数据:
  m" q* ~) M% U8 ~. z& W( g- g' c( srow    id        12      3633         385     506        515      5115我想问一下它看起来是这样的:( ?7 d! B2 z7 W
    row    id    group                    3636         37               38     38     5555        51  51    31       3333                                    3333333…这样,我就可以按数字的连续方式GROUP BY分组。
1 @+ c* U4 t7 a- S5 a8 g" p此外,循环/游标也是不可能的,因为我正在处理大量的数据,谢谢。8 ^. i" s0 X; }0 v1 r: ~9 a
                                                               
: q2 x+ T. o+ W8 G! t, [  q7 [8 @    解决方案:                                                               
5 i+ {8 |( Z, B2 F                                                                create table #temp(    IDUnique int Identity    ID int,    grp int)Insert into #temp(ID) Values(1)Insert into #temp(ID) Values(36)Insert into #temp(ID) Values(37)Insert into #temp(ID) Values(38)Insert into #temp(ID) Values(50)Insert into #temp(ID) Values(51)declare @IDUnique intdeclare @PreviousUnique intdeclare @ID intdeclare @grp intdeclare @Previous intdeclare @Row intDECLARE @getAccountID CURSOR SET @getAccountID = CURSOR FOR SELECT Row_Number() Over(Order by IDUnique) Row,IDUnique,ID  From #tempOPEN @getAccountIDFETCH NEXT FROM @getAccountID INTO @Row,@IDUnique,@ID WHILE @@FETCH_STATUS = 0BEGIN    IF(@Row = 1)    Begin        update #temp set grp = 1 Where IDUnique = @IDUnique        set @Previous = @ID        set @grp = 1    End    Else If (@Previous   1 = @ID)    Begin        update #temp set grp = @grp Where IDUnique = @IDUnique        set @Previous = @ID    End    Else    Begin        set @Previous = @ID        set @grp = @grp                                update #temp set grp = @grp Where IDUnique = @IDUnique    End    FETCH NEXT FROM @getAccountID INTO @Row,@IDUnique,@IDENDCLOSE @getAccountIDDEALLOCATE @getAccountIDSelect * from #tempDrop Table #temp
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则