关于SQL的复杂查询问题

qq12514054 2010-10-19 08:58:08
本人新手、学生 论坛规则还不太懂 但是现在这个问题真的很着急 请各位前辈帮帮忙

现有表如下:

TeacherID TeacherName ProgramID ProgramName
12 张三 7 院级项目
13 李四 7 院级项目
14 王五 7 院级项目
13 张三 9 系级项目
18 小三 9 系级项目
14 王五 9 系级项目
9
10
11

问题:现在我想同时查询出每一个项目(院级项目或系级项目、、、)中的任一条记录,结果如下:
TeacherID TeacherName ProgramID ProgramName
12 张三 7 院级项目
18 小三 9 系级项目
或:
TeacherID TeacherName ProgramID ProgramName
13 李四 7 院级项目
14 王五 9 系级项目
即每个项目显示一条记录不管教师(TeacherName)是否重复、、

之前有在论坛上搜过类似的贴子 但未能解决问题 请各位前辈务必要帮帮忙呀 谢谢了
...全文
65 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tlx20093A 2010-10-19
  • 打赏
  • 举报
回复

联机丛书-自联接-自定义联接 有详细描述
qq12514054 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sqlcenter 的回复:]
引用 5 楼 qq12514054 的回复:

引用 1 楼 sqlcenter 的回复:
再问下 如果我想要同时再加一个条件[TeacherName]查询满足该条件的记录怎么办呢
意思就是我创建一个存储过程, 有条件[TeacherName]时就根据条件TeacherName查询,查询出该教师(TeacherName)参与的所有项目,没有条件 TeacherName时就查询出所有项目(P……
[/Quote]
嘿嘿嘿嘿 解决了 谢谢啦
SQLCenter 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq12514054 的回复:]

引用 1 楼 sqlcenter 的回复:
再问下 如果我想要同时再加一个条件[TeacherName]查询满足该条件的记录怎么办呢
意思就是我创建一个存储过程, 有条件[TeacherName]时就根据条件TeacherName查询,查询出该教师(TeacherName)参与的所有项目,没有条件 TeacherName时就查询出所有项目(ProgramName),项目(ProgramName)不重复显示。谢谢!
[/Quote]

简单判断就行了嘛

create proc procname
(
@TeacherName varchar(20)=null
)
as
set nocount on
if @TeacherName is not null
select * from tbname where TeacherName=@TeacherName
else
select * from tbname t where not exists (select 1 from tbname where ProgramID=t.ProgramID and TeacherID<t.TeacherID)
set nocount off
go

exec procname

exec procname '张三'

sagitar1981 2010-10-19
  • 打赏
  • 举报
回复
12345343783
qq12514054 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sqlcenter 的回复:]
SQL code
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(TeacherID int, TeacherName varchar(8), ProgramID int, ProgramName varchar(8))
insert into #
select 12, '张三……
[/Quote]

这个问题已经解决了 谢谢了啊
再问下 如果我想要同时再加一个条件[TeacherName]查询满足该条件的记录怎么办呢
意思就是我创建一个存储过程, 有条件[TeacherName]时就根据条件TeacherName查询,查询出该教师(TeacherName)参与的所有项目,没有条件TeacherName时就查询出所有项目(ProgramName),项目(ProgramName)不重复显示。谢谢!
SQLCenter 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 billpu 的回复:]

规矩就是不要给沙发分...尽量给板凳
billpu 2010-10-19
  • 打赏
  • 举报
回复
规矩就是不要给沙发分...尽量给板凳
SQLCenter 2010-10-19
  • 打赏
  • 举报
回复
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(TeacherID int, TeacherName varchar(8), ProgramID int, ProgramName varchar(8))
insert into #
select 12, '张三', 7, '院级项目' union all
select 13, '李四', 7, '院级项目' union all
select 14, '王五', 7, '院级项目' union all
select 13, '张三', 9, '系级项目' union all
select 18, '小三', 9, '系级项目' union all
select 14, '王五', 9, '系级项目'

-- 最小TeacherID
select * from # t where not exists (select 1 from # where ProgramID=t.ProgramID and TeacherID<t.TeacherID)
/*
TeacherID TeacherName ProgramID ProgramName
----------- ----------- ----------- -----------
12 张三 7 院级项目
13 张三 9 系级项目
*/

-- 最大TeacherID
select * from # t where not exists (select 1 from # where ProgramID=t.ProgramID and TeacherID>t.TeacherID)
/*
TeacherID TeacherName ProgramID ProgramName
----------- ----------- ----------- -----------
14 王五 7 院级项目
18 小三 9 系级项目
*/

-- 随机
select * from # t where TeacherID = (select top 1 TeacherID from # where ProgramID=t.ProgramID order by newid())

/*
TeacherID TeacherName ProgramID ProgramName
----------- ----------- ----------- -----------
14 王五 7 院级项目
13 张三 9 系级项目
*/

34,587

社区成员

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

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