200分求一解决方案.立即给分!另100等下给

karykwan 2005-01-04 04:37:01
1 某公司1 2
2 某单位1 1
3 某公司2 1
4 某公司5 3
.........

表3_得分表:
sid score(得分) rid(所属单位)
1 60 1
2 75 1
3 80 2
4 50 3
5 90 4
6 20 1
7 40 2


如何得到下列结果:
综合类: 得分(统计总分) 排名
单位名称1 456.77 1
单位名称2 456.75 2
....

管理类: 得分 排名
单位名称1 5555.6 1
...............

司法类: 得分 排名
单位名称1 44444 1
..........

请问这个存储过程如何写.希望生成临时表!?
...全文
196 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
karykwan 2005-01-05
  • 打赏
  • 举报
回复
非常感谢 libin_ftsafe(子陌红尘) NinGoo(宁哥) 等众多CSDN网友,本人正在调试.如果没有问题的话.今天下午结贴.但就是像NinGoo(宁哥)所讲.如果出现分数一样的.如何做呢?
NinGoo 2005-01-05
  • 打赏
  • 举报
回复
晕,我不是已经给出提示了?

呵呵
可以把结果导入到临时表,再把类别和得分相同的记录的名次update成较小那个值的:)
ReViSion 2005-01-04
  • 打赏
  • 举报
回复
不用这样吧,一条语句就可以了,
我以前好像写过
子陌红尘 2005-01-04
  • 打赏
  • 举报
回复
呵呵,NinGoo(宁哥) 想得很周到,:)
NinGoo 2005-01-04
  • 打赏
  • 举报
回复
然后再根据类别选出记录插入到不同的table里就可以得到楼主所要的结果了
NinGoo 2005-01-04
  • 打赏
  • 举报
回复
想一下,可以把结果导入到临时表,再根据类别和得分相同的名次update成较小的:)
NinGoo 2005-01-04
  • 打赏
  • 举报
回复
楼上的已经基本搞定了,呵呵

一点小问题,如果同分算同名
比如
得分 排名
120 1
120 1
100 3
这样该怎么办呢?
子陌红尘 2005-01-04
  • 打赏
  • 举报
回复
必须要生成楼上规定格式的输出?我得再考虑一下。
子陌红尘 2005-01-04
  • 打赏
  • 举报
回复
-------------------------------------------------------------
--生成测试数据

create table 分类表(
cid int,
cnodename varchar(20)
)

create table 单位表(
rid int,
rname varchar(20),
cid int
)

create table 得分表(
sid int,
score numeric(6,2),
rid int
)


insert into 分类表 values(1, '综合类')
insert into 分类表 values(2, '管理类')
insert into 分类表 values(3, '司法类')



insert into 单位表 values(1 ,'某公司1', 2)
insert into 单位表 values(2 ,'某单位1', 1)
insert into 单位表 values(3 ,'某公司2', 1)
insert into 单位表 values(4 ,'某公司5', 3)




insert into 得分表 values(1 ,60, 1)
insert into 得分表 values(2 ,75, 1)
insert into 得分表 values(3 ,80, 2)
insert into 得分表 values(4 ,50, 3)
insert into 得分表 values(5 ,90, 4)
insert into 得分表 values(6 ,20, 1)
insert into 得分表 values(7 ,40, 2)

-------------------------------------------------------------

--生成临时表数据
select
identity(int,1,1) as ID , c.*
into
#t
from
(select
b.rname ,
b.cid ,
sum(a.score) as score
from
得分表 a
inner join
单位表 b
on
a.rid = b.rid
group by
b.rname ,
b.cid) c
order by
c.cid,
c.score desc

--得到相应的排名:
select
c.cnodename as 类别,
a.rname as 单位名称,
a.score as 得分(统计总分),
(a.id-b.id) as 排名
from
#t a,
(select cid,min(id)-1 as id from #t group by cid) b,
分类表 c
where
a.cid = b.cid and a.cid = c.cid

--输出:

-----------------------------
综合类 某单位1 120.00 1
综合类 某公司2 50.00 2
管理类 某公司1 155.00 1
司法类 某公司5 90.00 1
karykwan 2005-01-04
  • 打赏
  • 举报
回复
多个查询来返回多个结果集?最后可以得到三个表也行
子陌红尘 2005-01-04
  • 打赏
  • 举报
回复
这需要多个查询来返回多个结果集,:->
karykwan 2005-01-04
  • 打赏
  • 举报
回复
三个表:
表1_分类表:
cid cnodename(类别名)
1 综合类
2 管理类
3 司法类
...
表2_单位表:
rid rname(单位名) cid(所属分类)
1 某公司1 2
2 某单位1 1
3 某公司2 1
4 某公司5 3
.........

表3_得分表:
sid score(得分) rid(所属单位)
1 60 1
2 75 1
3 80 2
4 50 3
5 90 4
6 20 1
7 40 2


如何得到下列结果:
综合类: 得分(统计总分) 排名
单位名称1 456.77 1
单位名称2 456.75 2
....

管理类: 得分 排名
单位名称1 5555.6 1
...............

司法类: 得分 排名
单位名称1 44444 1
..........

不好意思
NinGoo 2005-01-04
  • 打赏
  • 举报
回复
你的table信息不全

管理类:
司法类:

这些信息没有列出来

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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