求一个查询语句

wu209000 2008-03-20 11:02:32
表: publishBook (专著)
BookNo (PK) 书号
bookName 书名
editor 主编
publishTime 出版时间
publish 出版单位
remark 备注

表: bookForTeacher (书作者)
bookNo (FK) 书号
TeacherNo (FK) 教职工号

表:teacher (老师)
teacherNo (PK) 教职工号
teacherName 教师姓名
department 系别

要求显示为:
书名 主编 出版日期 出版单位 全部作者 书号 备注 我系排名最前的作者 我系作者最靠前的排名

我系排名最前的作者,比如一共有三个作者,按顺序存放的,那么我系在这三个人当中最前面的叫什么名
举个例子,数据库中的记录:
bookNo TeacherNo
b001 t004
b002 t001
b002 t002
b002 t003
teacherNo teacherName department
t001 张三 管理系
t002 李四 计算机系
t003 王五 计算机系
t004 测试员 测控系
那么 我系(计算机系)排名最前的作者应该为:李四 我系作者最靠前的排名: 2
全部作者就是: 张三,李四,王五

...全文
54 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wu209000 2008-03-21
  • 打赏
  • 举报
回复
实现了. 散分
JiangHongTao 2008-03-20
  • 打赏
  • 举报
回复
create table bt(bookNo varchar(10),TeacherNo varchar(10))
insert bt select 'b001','t004'
union all select 'b002','t001'
union all select 'b002','t002'
union all select 'b002','t003'
create table tc(teacherNo varchar(10),teacherName varchar(10),department varchar(10))
insert tc select 't001' , '张三', '管理系'
union all select 't002', '李四' , '计算机系'
union all select 't003', '王五' , '计算机系'
union all select 't004', '测试员', '测控系'
go
create function dbo.getmess(@book varchar(10),@depart varchar(10),@m int)
returns varchar(20)
as
begin
declare @s varchar(20)
declare @t table(id int identity,bookno varchar(10),teacherno varchar(10),teachername varchar(10),department varchar(10))
insert @t select bookno,teacherno,'','' from bt where @book = bookno
update a set teachername = b.teachername,department = b.department from @t a,tc b where a.teacherno = b.teacherno
if @m = 2 select @s =rtrim(min(id)) from @t where department = @depart
if @m = 1 select @s = teachername from @t where id = (select min(id) from @t where department = @depart)
if @m = 0 select @s=isnull(@s+',','')+teachername from @t order by id
return @s
end
go
declare @dd varchar(10)
set @dd = '计算机系'
select bookno,dbo.getmess(bookno,@dd,0) 全部作者,dbo.getmess(bookno,@dd,1) 最前作者,dbo.getmess(bookno,@dd,2) 最前名次 from bt a
where exists(select 1 from tc where teacherno = a.teacherno and department = @dd)
group by bookno
go
drop table bt,tc
drop function getmess
/*
bookno 全部作者 最前作者 最前名次
---------- -------------------- -------------------- --------------------
b002 张三,李四,王五 李四 2

*/
dawugui 2008-03-20
  • 打赏
  • 举报
回复
根据teacherNo来排名?
我建议还是搞个排名序号比较好

34,838

社区成员

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

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