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

  • 主题发起人 主题发起人 icc
  • 开始时间 开始时间
I

icc

Unregistered / Unconfirmed
GUEST, unregistred user!
请高手指点:<br>以下为建表的SQL<br><br>drop table Reply<br><br>create table Reply(<br>E varchar(20) not null,<br>Q int not null,<br>M float default 0,<br>constraint PKReply primary key(E, Q))<br><br>insert Reply select 'E1', 1, 1.0<br>insert Reply select 'E1', 2, 2.0<br>insert Reply select 'E1', 3, 3.0<br>insert Reply select 'E1', 4, 4.0<br>insert Reply select 'E2', 1, 5.0<br>insert Reply select 'E2', 2, 6.0<br>insert Reply select 'E2', 3, 7.0<br>insert Reply select 'E2', 4, 8.0<br><br>表中的任何一个E值对应的Q值(多个),是相同的,个数相同,值也相同<br>如上表中,Q的值域为 1, 2, 3, 4<br>求一存储过程命名为 Sp_Stat<br>要求结果形如:<br><br>应用1:<br> E &nbsp; Sum1-2 &nbsp; Sum3-4 &nbsp;SumAll<br>-----------------------------<br>E1 &nbsp; &nbsp; &nbsp; &nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp;7 &nbsp; &nbsp; &nbsp;10<br>E2 &nbsp; &nbsp; &nbsp; 11 &nbsp; &nbsp; &nbsp; 15 &nbsp; &nbsp; &nbsp;26<br>All &nbsp; &nbsp; &nbsp;14 &nbsp; &nbsp; &nbsp; 22 &nbsp; &nbsp; &nbsp;36<br><br>应用2:<br> E &nbsp; Sum1-3 &nbsp;SumAll<br>-----------------------------<br>E1 &nbsp; &nbsp; &nbsp; &nbsp;6 &nbsp; &nbsp; &nbsp;10<br>E2 &nbsp; &nbsp; &nbsp; 18 &nbsp; &nbsp; &nbsp;26<br>All &nbsp; &nbsp; &nbsp;24 &nbsp; &nbsp; &nbsp;36<br><br>在每个应用中,除了 E、SumAll,其它字段根据参数生成<br>即存储过程是带参数的,是指定Q字段统计范围用的,可能有0或M个范围区段<br>如在应用1中指定了 &quot;1-2&quot;,&quot;3-4&quot; 两个区段<br>在应用2中指定了 &quot;1-3&quot; 一个区段
 
有点意思,你的Q值域有没有独立的表?我觉得应该有一张Q的表就好了.
 
还有你的Q可以分为M个区段?这个分发你要怎么设计?
 
为了简化问题的描述,已经去掉了Q的值域表,这个重要吗
 
这是一个分段统计的应用,就是把Q值按所在的区段来统计,而区段是自定义的<br>至于怎么实现,不大好想
 
我就觉得应该有这个表,那么你想要的p_stat的输入参数是什么形式,不可能无限制的.
 
分段的话,最好再用一张表,存储你想要的分段类型.<br>分段编号 int,分段名称 varchar(),分段范围 varchar().<br>在执行存储过程的时候去调用分段编号.
 
SQL接受的应该是varchar,但它的来源应该是<br>一对Array,或一个Tstrings类型的
 
如:数组形式<br>A:1,3<br>B:2,4<br>或字符串列表形式<br>1-2<br>3-4<br>总之,对SQL来说简单些更好
 
对,应该有这个分段表
 
我得想法是这样的,你的存储过程只有一个参数,那就是分段编号.<br><br>我根据分段编号得到你的分段信息,在根据分段信息动态生成你要的那种表,<br><br>在你的分段表里,一定要有严格的格式限制.比如都是x-x的形式,同时要考虑是否又交集的问题,没有的话好处里一些.
 
它可能一次就会传0或多个分段,只有一个分段编号不行<br>格式限制好说,交集没有问题,反正用sum统计,比如1-3,2-4理论上没有问题
 
你想好一个明确的方案,我来作一下.应该不难.
 
参数就不好定
 
我明白你的意思了,分段编号指的是一组分段,它们在表里有一个相同的分类值,是不是这样
 
我所谓的交集值的的是(2-4,5).<br><br>传递一个分段编号是可以的,因为额外还要有一个primarykey的.子增字段.
 
其实如果你不需要保留分段信息的话,直接传进来一个用comma分割的字段串就行.<br>每个分段都是x-x的形式.
 
怎么会单有一个5呢<br>我的QQ是14574256,要不在QQ上聊?
 
如果传递 1-3,2-4,1-16 这样的参数好做吧?<br>分段信息不必保存,或可以延后设计
 
我得想法是为了更加灵活的组合,那样的话比如统计(3-7,9)这样的.<br><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
后退
顶部