一个生成编号问题

jammyryan 2005-10-09 11:32:59
例:一个表,有学生,课程,成绩
要求根据学生的成绩为每个学生的课程各自编号,编号从1开始
用查询实现,不用游标
...全文
170 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jammyryan 2005-10-09
  • 打赏
  • 举报
回复
这样的话,成绩相同时会出错
zheninchangjiang 2005-10-09
  • 打赏
  • 举报
回复
select student,sn=(select count(*) from tablename where student=a.student and grade<=a.grade),course,grade from tablename a order by student,grade
sunny_river 2005-10-09
  • 打赏
  • 举报
回复
更正!上面的错了,不好意思!
select student,sn=
(
select count(*) from tablename
where student=a.student
and
(str(grade,6,2)+course)<=(str(a.grade,6,2)+a.course)
),
course,grade
from tablename a order by student,grade
sunny_river 2005-10-09
  • 打赏
  • 举报
回复
如果课程个数不确定的话:
就要写个函数代替case语句,可以用unicode()来逐个解析课程的字符,然后相加,就是一个数字了
具体我就不实现了!
sunny_river 2005-10-09
  • 打赏
  • 举报
回复
实现应该是可以的,只是有点麻烦!
关键是把课程名称作为生成编号的一个因素!也就是要把课程名称变成数字!把字符变成数字的方法可能有很多,下面只是我的一种实现方式!
如果课程的个数是确定的,就简单一点,否则复杂一点!
课程个数确定:
select student,sn=
(
select count(*) from
(
select case course when '语文' then 1 when '数学' then 2 when '英语' then 3 else 4 end coursenum,
grade from tablename
) b
where student=a.student and
(b.coursenum+b.grade)<=(a.coursenum+a.grade)),
course,grade
from
(
select case grade when '语文' then 1 when '数学' then 2 when '英语' then 3 else 4 end coursenum,
student,grade,course from tablename
) a
order by student
realgz01 2005-10-09
  • 打赏
  • 举报
回复
如果本来就没有唯一标识,那是乱弹琴,建议在前台实现
realgz01 2005-10-09
  • 打赏
  • 举报
回复
有学号的话 1句话so easy
否则的话 2句话 so easy

jammyryan 2005-10-09
  • 打赏
  • 举报
回复
如果分两次或用临时表可以实现吗/?
zxbyhcsdn 2005-10-09
  • 打赏
  • 举报
回复
算了!我投降!! 如果是在Oracle中就好了哈1!它有一个RowId()
zxbyhcsdn 2005-10-09
  • 打赏
  • 举报
回复
== 感觉要弄出来了哈1!
jammyryan 2005-10-09
  • 打赏
  • 举报
回复
不然,能到这里求救吗,呵呵
zxbyhcsdn 2005-10-09
  • 打赏
  • 举报
回复
晕哈!!成绩一样而且还要生成不同的编号这个有点高难哈!!
jammyryan 2005-10-09
  • 打赏
  • 举报
回复
对,就是这样啊
zxbyhcsdn 2005-10-09
  • 打赏
  • 举报
回复
楼主的意思是不是说如果两个同学的成绩一样的话,
用上面 631799(杭州工人) 他们的办法就会产生相同的编号???
jammyryan 2005-10-09
  • 打赏
  • 举报
回复
一样的道理,数据出来还是错误的
631799 2005-10-09
  • 打赏
  • 举报
回复
select student,sn=(select count(distinct 成绩) from tablename where student=a.student and grade<=a.grade),course,grade from tablename a order by student,grade
jammyryan 2005-10-09
  • 打赏
  • 举报
回复
自己顶

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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