SQL算法问题,请高手指点!在线等,高分赠送(200分)

  • 主题发起人 主题发起人 icc
  • 开始时间 开始时间
(3-7,9)就是(3-7,9-9),已经兼容了
 
不是,(3-7,9)放在一个统计里,不是两个.
 
不理解你的意思
 
这样吧,我现在按照我得想法写一个,一会发给你,你晚上在不?
 
我不能回去太碗,非常感谢你
 
通过一个存储过程,一个函数解决问题.<br>create function F_row_to_table (@s varchar(2000),@n char(1),@m char(1))<br>returns @t table<br>(<br>bg int,<br>ed int,<br>name varchar(20)<br>) <br>as<br>begin<br>declare @str varchar(20)<br>declare @bg varchar(10),@ed varchar(10)<br>declare @title varchar(20)<br>select @title='Sum'<br> while charindex(@n,@s)&gt;0<br> begin<br> select @str=left(@s,charindex(@n,@s)-1)<br> select @bg=left(@str,charindex(@m,@str)-1),@ed=right(@str,len(@str)-charindex(@m,@str))<br> insert @t select @bg,@ed,'['+@title+@str+']'<br> select @s=right(@s,len(@s)-charindex(@n,@s))<br> end<br>return <br>end<br><br><br>create procedure p_stat(@s varchar(8000))<br>as<br>begin<br>declare @str varchar(8000)<br>select @str='select case when grouping(E)=0 then E else ''ALL'''+' end'<br>select @str=@str+',sum(case when Q between '+convert(varchar,bg)+' and '+<br>convert(varchar,ed)+' then M else 0 end) as '+name &nbsp;from dbo.F_row_to_table(@s,',','-')<br>select @str=@str+',sum(M) as [SumAll]'<br>select @str=@str+' from reply group by E with rollup'<br>exec(@str)<br>end<br><br>用你的数据进行的测试:<br>exec p_stat '1-3,2-4,'<br>-----------------------<br>E1 6 9 10<br>E2 18 21 26<br>ALL 24 30 36<br>------------------------------------<br><br>exec p_stat '1-1,2-3,4-4,'<br>------------------------------------<br>E1 1 5 4 10<br>E2 5 13 8 26<br>ALL 6 18 12 36<br>-------------------------------------<br><br>exec p_stat '1-1,2-2,3-3,4-4,'<br>-------------------------------<br>E1 1 2 3 4 10<br>E2 5 6 7 8 26<br>ALL 6 8 10 12 36
 
问题解决了,太好了<br>我现在对存储过程了解不深,也看不太懂那些代码,有没有什么资料俺学习一下
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部