希望能用标准的sql语句解决纵表的组合查询问题

shiwaxingge 2005-09-01 11:16:42
Create table test (name char(10),km char(10),cj int)

insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)
insert test values('李四','生物',78)
......

像这样的表,如何查询数学大于60,并且语文大于60的人名呢?
http://community.csdn.net/Expert/topic/4243/4243975.xml?temp=.7503931
多开贴,解决立即给分
...全文
152 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
沝林 2005-09-01
  • 打赏
  • 举报
回复
select name from testa
where km in ('语文','数学') and cj > 60
group by name
having count(*) =2
feng2 2005-09-01
  • 打赏
  • 举报
回复
select distinct name from test
where name in
(select distinct name from test where km='数学' and cj > 60)
and km='语文' and cj > 60;
waterfirer 2005-09-01
  • 打赏
  • 举报
回复
select a.name from (select name from ttest where (km='数学' and cj>60)) a
where (select cj from ttest where name=a.name and km='语文')>60
沝林 2005-09-01
  • 打赏
  • 举报
回复
select name from testa
group by name
having sum(case when km = '语文' and cj > 60 then 1
when km = '数学' and cj > 70 then 1
else 0 end) = 2

NAME
----------
李四
张三
shiwaxingge 2005-09-01
  • 打赏
  • 举报
回复
to feng2(蜀山风云):
可能是我没有表述清楚,我的意思是,如果我要选择
语文>60 and 数学>61 and 体育>99 and 政治>0 and 计算机>99 and 音乐>5 and ...
这样的70个科目的条件的限制,
那么可能就要嵌套很多层了,

难道只能用这种办法解决吗?
feng2 2005-09-01
  • 打赏
  • 举报
回复
嵌套是由筛选条件决定的,与科目数量无关;
waterfirer 2005-09-01
  • 打赏
  • 举报
回复
duanzilin(寻)的办法很好,没有嵌套select
如果用嵌套的方法那就真要嵌套70次了,所以嵌套的不好,慢
shiwaxingge 2005-09-01
  • 打赏
  • 举报
回复
对于嵌套select语句的做法,我有一点想法,
如果有70个科目或者71个科目,
难道要嵌套70次吗?

谢谢大家的指导,希望大家可以在讨论一下

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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