VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2048|回复: 16

简单统计问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-8 07:20:01 | 显示全部楼层 |阅读模式
create table #t (class varchar(20),spendtime int,orderindex int identity)
insert #t
select 'A',1 union all
select 'B',1 union all
select 'B',2 union all
select 'A',2 union all
select 'B',2
select * from #t
--要求结果相邻多个class相同,spendtime相加
A   1
B   3
A   2
B   2
--drop table #t
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-9 06:45:02 | 显示全部楼层
select *, 0 refindex  into #a from #t

declare @class varchar(10),@spendtime int,@refindex int
select @class='',@spendtime=0,@refindex=0

update #a set @spendtime=case when class=@class then @spendtime+spendtime else spendtime end
        ,spendtime=@spendtime,@refindex=case when class=@class then @refindex else @refindex+1 end
        ,refindex=@refindex,@class=class

select class,max(spendtime)
from #a
group by class,refindex
回复

使用道具 举报

0

主题

100

帖子

53.00

积分

新手上路

Rank: 1

积分
53.00
发表于 2020-1-9 23:36:01 | 显示全部楼层
不算复杂吧.
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-10 11:36:01 | 显示全部楼层
学下
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-10 12:09:02 | 显示全部楼层
create table #t (class varchar(20),spendtime int,orderindex int identity)
insert #t
select 'A',1 union all
select 'B',1 union all
select 'B',2 union all
select 'A',2 union all
select 'B',2
--查询

select ta.class, spendtime=case when  ta.orderindex=tb.orderindex+1
                      then isnull(ta.spendtime,0)+isnull(tb.spendtime,0)
                    else isnull(ta.spendtime,0) end
from
(
        select * from #t a
        where not exists (select 1 from #t where class=a.class and orderindex=a.orderindex+1)
) ta
left join
(
        select * from #t a
        where   exists (select 1 from #t where class=a.class and orderindex=a.orderindex+1)
) tb
on ta.class=tb.class
--结果
/*
class                spendtime   
-------------------- -----------
A                    1
B                    3
A                    2
B                    2

(所影响的行数为 4 行)

*/
回复

使用道具 举报

0

主题

66

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-1-10 12:54:02 | 显示全部楼层
学习
回复

使用道具 举报

0

主题

66

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-1-10 16:00:01 | 显示全部楼层
??
回复

使用道具 举报

0

主题

49

帖子

35.00

积分

新手上路

Rank: 1

积分
35.00
发表于 2020-1-10 17:36:01 | 显示全部楼层
select class,sum(spendtime) as spendtime
from
(
select class,spendtime,
orderindex = (select isnull(max(orderindex),0) + 1 from #t where orderindex < a.orderindex and class <> a.class)
from #t a
)tt
group by class,orderindex


A        1
B        3
A        2
B        2
回复

使用道具 举报

0

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-10 19:45:02 | 显示全部楼层
UP
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-10 22:27:01 | 显示全部楼层
用CTE处理:
with temp (class,spendtime,orderindex,refindex)
as
(
select *,orderindex from #t a
        where not exists (select 1 from #t where class=a.class and orderindex=a.orderindex-1)

union all

select a.class,a.spendtime,a.orderindex,b.refindex from #t a,temp b
where a.class=b.class and a.orderindex=b.orderindex+1
)

select class,sum(spendtime) as spendtime from temp group by class,refindex
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表