请问各位高手这样的存储过程该怎么写?呵呵,也挺难的!各位帮帮忙!

danna 2002-11-27 07:42:14
问题是这样的.有一个tb_judgefile表!
字段名   类型  长度   是否为空
tc_id(主键)int 4 0
stu_id char 10 0
jt_tc_id char 14 0
sgs_id int 4 0
jf_grades float 8 1
jf_yesno int 4 1
现在我要对此表进行分类汇总,这个汇总的条件就是先判断tb_judgedate表里找到的jd_select的值,如果jd_select的值为0就只汇总sum(jf_grades).为1的话就只汇总(count(jf_yesno)).分类的依据是通过 jt_tc_id到tb_classcourse里找到相
应的分类依据.
表tb_classcourse的结构:
字段名   类型  长度
jt_tc_id  char 14 0(主键)
cla_id  char 7 0
cou_id  int 4 0
tea_id  int 4 0
然后再在此表里找到相应的cla_id,cou_id,tea_id并分别再利用这三个id到各自表
tb_class,tb_course,tb_teacher,找出相应的记录信息.(在这里如得到各表的
cla_name,cou_name,tea_name)的值!最后的分组依据就是如cla_id+sgs_id
像这样的话最后的结果集是(以班级号来分组做例)
cla_name,sgs_id,sum(jf_grades)
这里是如果jd_select的值为0就只汇总sum(jf_grades).
同理为1的话就只汇总(count(jf_yesno)).
cla_name,sgs_id,count(jf_yesno)

存储过程我一点都不懂.怎么动笔都不会.呵呵,比想象中的要难!各位帮我分析一下!

谢谢!


...全文
30 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
danna 2002-11-28
  • 打赏
  • 举报
回复
问题已经被高手j9988完全解决了!


谢谢j9988!现在有点事.我等下就来结贴哦!
j9988 2002-11-28
  • 打赏
  • 举报
回复
1.如果:d.cou_name,e.tea_name要:
select a.sgs_id,max(c.cla_name),max(d.cou_name),e.tea_name,
sum(case when f.jd_select=0
then jf_grades
else (case when jf_yesno is null
then 0
else 1
end)
end)
from
tb_judgefile a,
tb_classcourse b,
tb_class c,
tb_course d,
tb_teacher e,
tb_judgedate f
where a.jt_tc_id=b.jt_tc_id
and b.cla_id=c.cla_id
and b.cou_id=d.cou_id
and b.tea_id=e.tea_id
group by a.sgs_id,c.cla_name

1.如果:d.cou_name,e.tea_name不要:
select a.sgs_id,c.cla_name,
sum(case when f.jd_select=0
then jf_grades
else (case when jf_yesno is null
then 0
else 1
end)
end)
from
tb_judgefile a,
tb_classcourse b,
tb_class c,
tb_judgedate f
where a.jt_tc_id=b.jt_tc_id
and b.cla_id=c.cla_id
group by a.sgs_id,c.cla_name
danna 2002-11-28
  • 打赏
  • 举报
回复
嗯,好的!谢谢j9988!
j9988 2002-11-28
  • 打赏
  • 举报
回复
你先试试结果,再做调整吧
j9988 2002-11-28
  • 打赏
  • 举报
回复
那你就要了,可能取其它值吧,如果取非GROUP BY的值一定要用聚合函数
danna 2002-11-28
  • 打赏
  • 举报
回复
不行,这个tb_course,tb_teacher肯定是要的.我这只是简化问题.就只分别
取他们的名字就没有取了!呵呵,高手你是从哪方面看出可以不要呢?

那分组我看了一下帮助.用了group by 就只可以用聚簇函数了!
j9988 2002-11-28
  • 打赏
  • 举报
回复
按你题意:tb_course tb_teacher 两表好象可以不要啊
如果要名称,分组NAME只有取最大或最小的了
danna 2002-11-28
  • 打赏
  • 举报
回复
真的非常谢谢j9988的帮忙!

为什么.cou_name,e.tea_name要,就要用MAX(cou_name),max(tea_name)
呀?
danna 2002-11-27
  • 打赏
  • 举报
回复
呵呵,真的吗?

不过,我对老大的理解呢是:技术好,就是老大

group by a.sgs_id,c.cla_name,d.cou_name,e.tea_name

这句的意思是先按sgs_id分组,再按cla_name,cou_name,tea_name分组?
我说照这样分组下去的话就没有组可言了耶!因为各是一条记录!

昵称被占用了 2002-11-27
  • 打赏
  • 举报
回复
呵呵,老大真的有意思!

这个问题列出例子容易看明白些,眼睛花了看不清楚。
j9988 2002-11-27
  • 打赏
  • 举报
回复
老大的意思--就是比你老师还大!
我可是真的比你老师大哦!
danna 2002-11-27
  • 打赏
  • 举报
回复


不会吧,老大,你还是学生呀!高!真是佩服!

呵呵,那我自已再去看一下!非常谢谢你!
j9988 2002-11-27
  • 打赏
  • 举报
回复
我也不明白,老师说这么做,我就这么做了耶!
danna 2002-11-27
  • 打赏
  • 举报
回复
没有NULL,唉,搞不懂.为什么就只要这样连接一下就可以了哦!
j9988 2002-11-27
  • 打赏
  • 举报
回复
select a.sgs_id,c.cla_name,d.cou_name,e.tea_name,
sum(case when f.jd_select=0
then jf_grades
else (case when jf_yesno is null
then 0
else 1
end)
end)
from
tb_judgefile a,
tb_classcourse b,
tb_class c,
tb_course d,
tb_teacher e,
tb_judgedate f
where a.jt_tc_id=b.jt_tc_id
and b.cla_id=c.cla_id
and b.cou_id=d.cou_id
and b.tea_id=e.tea_id
group by a.sgs_id,c.cla_name,d.cou_name,e.tea_name

j9988 2002-11-27
  • 打赏
  • 举报
回复
除了1.2.3.4外无其它值?有无NULL值?
danna 2002-11-27
  • 打赏
  • 举报
回复
这个jf_yesno里有1,2,3,4种值.我要汇总1,2,3,4各个数的个数!
j9988 2002-11-27
  • 打赏
  • 举报
回复
你那count(jf_yesno)是数jf_yesno个数,还是jf_yesno合计值?
j9988 2002-11-27
  • 打赏
  • 举报
回复
基本上是表联接问题,大体这样,不对你修改一下:
select a.sgs_id,c.cla_name,d.cou_name,e.tea_name,
sum(case when f.jd_select=0 then jf_grades
else jf_yesno*1 end)
from
tb_judgefile a,
tb_classcourse b,
tb_class c,
tb_course d,
tb_teacher e,
tb_judgedate f
where a.jt_tc_id=b.jt_tc_id
and b.cla_id=c.cla_id
and b.cou_id=d.cou_id
and b.tea_id=e.tea_id
group by a.sgs_id,c.cla_name,d.cou_name,e.tea_name
j9988 2002-11-27
  • 打赏
  • 举报
回复
select a.sgs_id,c.cla_name,d.cou_name,e.tea_name,
sum(case when f.jd_select=0 then jf_grades
else jf_yesno end)
from
tb_judgefile a,
tb_classcourse b,
tb_class c,
tb_course d,
tb_teacher e,
tb_judgedate f
where a.jt_tc_id=b.jt_tc_id
and b.cla_id=c.cla_id
and b.cou_id=d.cou_id
and b.tea_id=e.tea_id
group by a.sgs_id,c.cla_name,d.cou_name,e.tea_name,
加载更多回复(3)

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧