if object_id('tb') is not null drop table tb
go
create table tb(編號 varchar(10),顏色 nvarchar(10),形狀 nvarchar(10))
insert into tb values('001' ,'紅色' ,'圓形')
insert into tb values('005' ,'紅色' ,'圓形')
insert into tb values('006' ,'紅色' ,'圓形')
insert into tb values('008' ,'紅色' ,'圓形')
insert into tb values('011' ,'黑色' ,'球形')
insert into tb values('015' ,'黃色' ,'方形')
insert into tb values('026' ,'紅色' ,'圓形')
insert into tb values('031' ,'紅色' ,'圓形')
insert into tb values('035' ,'黃色' ,'球形')
insert into tb values('036' ,'黑色' ,'球形')
insert into tb values('039' ,'黑色' ,'球形')
insert into tb values('055' ,'黑色' ,'球形')
go
select fid=0,id=0,顏色+形狀 as 顏色形狀 into # from tb order by 編號
select * from #
declare @顏色形狀 nvarchar(20),@i int,@j int
update # set id=@i,fid=@j,
@i=case when @顏色形狀=顏色形狀 then isnull(@i,0)+1 else 1 end,
@j=case when @顏色形狀=顏色形狀 then isnull(@j,0) else isnull(@j,0)+1 end,
@顏色形狀=顏色形狀
select * from #
select ltrim(max(id))+顏色形狀 as 結果 from # group by fid,顏色形狀 order by fid
drop table #
/* 結果
--------------------------------
4紅色圓形
1黑色球形
1黃色方形
2紅色圓形
1黃色球形
3黑色球形
(6 行受影響) */