如何逐行依次统计表中的数据? select level,[count]=(select sum([count]) from tb where level=a.level and [count]<=a.[count]) from tb a 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 create table tb(Level varchar(10), [Count] int) insert into tb values('Level1' , 1 )insert into tb values('Level2' , 3 )insert into tb values('Level3' , 2 )insert into tb values('Level4' , 5 )insert into tb values('Level5' , 8 )goselect t.level , [count] = (select sum([count]) from tb where level <= t.level)from tb tdrop table tb/*level count ---------- ----------- Level1 1Level2 4Level3 6Level4 11Level5 19(所影响的行数为 5 行)*/ declare @ table(Level varchar(10), [Count] int)------ ------ insert @ select 'Level1' , 1 insert @ select 'Level2' , 3 insert @ select 'Level3' , 2 insert @ select 'Level4' , 5 insert @ select 'Level5' , 8 select level,[count]=(select sum([count]) from @ where Level<=a.Level) from @ alevel count---------- -----------Level1 1Level2 4Level3 6Level4 11Level5 19(5 行受影响) 补充问题:1)在用level <= t.level的时候,这个表达式能否正确运算跟level的数据类型无关吗?2)请解释一下,比如轮到统计原表第一第二这前两条记录的时候,按照您写的SQL语句,数据库引擎内部是怎样执行的?3)请问:这个问题用递归函数可以实现吗,如何实现?谢谢,分数不够请说声,会加分! 1.随了text,image等类型的2.内部的还没研究,总之它是按左边的行逐行统计3.觉得没多大必要,除非使用频率很高。 --创建测试数据:create table tb(Level varchar(10), [Count] int) insert into tb values('Level1' , 1 )insert into tb values('Level2' , 3 )insert into tb values('Level3' , 2 )insert into tb values('Level4' , 5 )insert into tb values('Level5' , 8 )go--创建函数:create function getsum(@a varchar(20))returns intasbegin declare @n int select @n=sum([count]) from tb where @a>=level return (@n)endgo--查询:select level ,[count],[counts] = dbo.getsum(level) from tb--结果:/*level count counts---------- ----------- -----------Level1 1 1Level2 3 4Level3 2 6Level4 5 11Level5 8 19(5 行受影响)*/drop table tb --删除测试表drop function getsum --删除测试函数 开启服务时提示错误 自认为对SQL语句已经很熟悉了,可是写出来的查询还是效率不高. 请热心人帮忙优化一下下面这两个查询语句: 在PB中调用有OUTPUT 的过程不返回值 我怎么从A数据库中复制表a的数据到B数据库的表b中???? tenlnet (本机)ip 1433问题 统计报表的实现,百分求SQL语句 怎样格式化输出字符串,谢谢。在线等。 给您补分 来晚了 55555 给你解释下吧 询问一个基础问题select * from 假LIKE的问题 @@和@的区别 sql语句怎么改进? 急求一条Sql语句, getDate()用法
insert into tb values('Level1' , 1 )
insert into tb values('Level2' , 3 )
insert into tb values('Level3' , 2 )
insert into tb values('Level4' , 5 )
insert into tb values('Level5' , 8 )
goselect t.level ,
[count] = (select sum([count]) from tb where level <= t.level)
from tb tdrop table tb/*
level count
---------- -----------
Level1 1
Level2 4
Level3 6
Level4 11
Level5 19(所影响的行数为 5 行)*/
------ ------
insert @ select 'Level1' , 1
insert @ select 'Level2' , 3
insert @ select 'Level3' , 2
insert @ select 'Level4' , 5
insert @ select 'Level5' , 8 select level,[count]=(select sum([count]) from @ where Level<=a.Level) from @ alevel count
---------- -----------
Level1 1
Level2 4
Level3 6
Level4 11
Level5 19(5 行受影响)
补充问题:
1)在用level <= t.level的时候,这个表达式能否正确运算跟level的数据类型无关吗?
2)请解释一下,比如轮到统计原表第一第二这前两条记录的时候,按照您写的SQL语句,数据库引擎内部是怎样执行的?
3)请问:这个问题用递归函数可以实现吗,如何实现?谢谢,分数不够请说声,会加分!
2.内部的还没研究,总之它是按左边的行逐行统计
3.觉得没多大必要,除非使用频率很高。
create table tb(Level varchar(10), [Count] int)
insert into tb values('Level1' , 1 )
insert into tb values('Level2' , 3 )
insert into tb values('Level3' , 2 )
insert into tb values('Level4' , 5 )
insert into tb values('Level5' , 8 )
go
--创建函数:
create function getsum(@a varchar(20))
returns int
as
begin
declare @n int
select @n=sum([count]) from tb where @a>=level
return (@n)
end
go--查询:
select level ,[count],[counts] = dbo.getsum(level) from tb--结果:
/*
level count counts
---------- ----------- -----------
Level1 1 1
Level2 3 4
Level3 2 6
Level4 5 11
Level5 8 19(5 行受影响)
*/
drop table tb --删除测试表
drop function getsum --删除测试函数