Sql 分组求和语句



Sql 分组求和语句。

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 行受影响) */