一个SQL难题,从前面几条记录里找满足条件的记录

e_fresh 2010-06-11 11:42:00
问题如下:
表A
准考证号,姓名,身份证号,成绩1,成绩2,职位代码


表B
考区代码,职位代码,该职位招录人数


说明:表A,表B中有多条记录,表A中准考证号为11位,第3,4位位考区代码

现在想从成绩表中把每个职位的根据其招录人数N找出前N*3名,然后从这N*3名里找出总分(成绩1+成绩2)>=100分的人数

最后结果如下:
考区代码,职位代码,该职位招录人数,该职位上线人数



举例:考区01,职位代码3207,计划招录2人,也就是从成绩表中找到该职位前6名,判断这六个人中总分大于100分的人数,成绩排名方法:先按总成绩排名,总成绩相同则按成绩1排名



先拜谢各位了
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
永生天地 2010-06-11
  • 打赏
  • 举报
回复
最好放些数据上来
chuifengde 2010-06-11
  • 打赏
  • 举报
回复
...FROM # WHERE id>=aa.id and  ==>FROM # WHERE id<=aa.id and ...
永生天地 2010-06-11
  • 打赏
  • 举报
回复
试试看
select b.*,a.*
from 表B b left join 表A a on b.职位代码=a.职位代码 and b.考区代码=substring(a.准考证号,3,2)
and (select count(1) from 表A where 职位代码=b.职位代码 and substring(准考证号,3,2)=b考区代码 and (成绩1+成绩2)>(a.成绩1+a.成绩2))<b.该职位招录人数*3
and a.成绩1+a.成绩2>=100
order by a.成绩1+a.成绩2 desc , a.成绩1 desc
chuifengde 2010-06-11
  • 打赏
  • 举报
回复
??
SELECT *,id=IDENTITY(INT,1,1) INTO # FROM a
SELECT *,SUBSTRING(准考证号,3,2) q,(SELECT COUNT(1) FROM # WHERE id>=aa.id and SUBSTRING(准考证号,3,2)=SUBSTRING(aa.准考证号,3,2) and 职位代码=aa.职位代码 ) o into #1
FROM # aa
SELECT q 考区代码,aa.职位代码,count(1) 该职位上线人数 FROM #1 aa INNER JOIN b bb
ON aa.q=bb.考区代码 and AND=bb.职位代码
WHERE aa.o<=bb.该职位招录人数*3 and (成绩1+成绩2)>=100
GROUP BY q,职位代码
DROP TABLE #1,#
e_fresh 2010-06-11
  • 打赏
  • 举报
回复
补充一下,数据库环境为2000

27,579

社区成员

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

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