SqlServer 2022通过临时表和游标遍历方式逻辑处理获取目标数据

  -- 创建局部临时表

  if object_id('tempdb..#myTempTable') is not null begin

  drop table #myTempTable

  end

  /*else begin

  create table #myTempTable(

  工作中心 varchar(50),

  序号 int

  )

  end*/

  -- 临时表不存在情况下

  select * into #myTempTable from(

  select '1001' 工作中心,1 序号 union all

  select '1002' 工作中心,2 序号 union all

  select '001' 工作中心,3 序号 union all

  select '1004' 工作中心,4 序号 union all

  select '1008' 工作中心,5 序号 union all

  select '001' 工作中心,6 序号 union all

  select '001' 工作中心,7 序号 union all

  select '001' 工作中心,8 序号 union all

  select '1009' 工作中心,9 序号

  ) a

  -- select * from #myTempTable

  -- 定义变狼

  declare @工作中心 varchar(50)

  declare @序号 int

  declare @前一个工作中心 varchar(50)

  declare @前一个序号 int

  set @前一个工作中心='#'

  -- 定义游标

  declare cursorName cursor for

  select 工作中心,序号 from #myTempTable

  -- 打开游标

  open cursorName

  -- 遍历游标

  fetch next from cursorName into @工作中心,@序号;

  while @@fetch_status=0 begin

  -- print(@工作中心)

  if @前一个工作中心='#' begin

  set @前一个工作中心=@工作中心

  set @前一个序号=@序号

  end

  else begin

  if @工作中心='001' begin

  if @前一个工作中心!='001' begin

  -- 输出001上的一条记录

  print(@前一个工作中心+','+convert(varchar(50),@前一个序号))

  end

  end

  else begin

  if @前一个工作中心!=@工作中心 and @前一个工作中心='001' begin

  -- 输出001最后一条

  print(@前一个工作中心+','+convert(varchar(50),@前一个序号))

  end

  end

  set @前一个工作中心=@工作中心

  set @前一个序号=@序号

  end

  -- 遍历下一条,一定要加上这句,否则会一直循环

  fetch next from cursorName into @工作中心,@序号;

  end

  -- 关闭和销毁游标

  close cursorName

  deallocate cursorName