oracle的
用一条SQL语句 查询出每门课都大于80分的学生姓名  name   kecheng   fenshu 
张三     语文       81
张三     数学       75
李四     语文       76
李四     数学       90
王五     语文       81
王五     数学       100
王五     英语       90这个用all怎么写呢,我记得用all可以写出来吧
 a1   a2 
 1    a 
 1    b 
 2    x 
 2    y 
 2    z 
用select能选成以下结果吗? 
1 ab 
2 xyz 这个怎么写呢,如果用函数的话该怎么循环呢

解决方案 »

  1.   

    你的数据库是10G么?
    10G有WMSYS.WM_CONCAT()
    select a1 WMSYS.WM_CONCAT(a2) from t group by a1
      

  2.   

    不过这个有逗号间隔的 你把逗号 replace下就可以了
      

  3.   

    第一题:
    with temp as(
    select '张三' name,'语文' kecheng,81 fenshu from dual
    union all
    select '张三' name,'数学' kecheng,75 fenshu from dual
    union all
    select '李四' name,'语文' kecheng,76 fenshu from dual
    union all
    select '李四' name,'数学' kecheng,90 fenshu from dual
    union all
    select '王五' name,'语文' kecheng,81 fenshu from dual
    union all
    select '王五' name,'数学' kecheng,100 fenshu from dual
    union all
    select '王五' name,'英语' kecheng,90 fenshu from dual
    )select name from temp having min(fenshu) > 80 group by name with temp as(
    select 1 a1,'a' a2 from dual
    union all
    select 1 a1,'b' a2 from dual
    union all
    select 2 a1,'x' a2 from dual
    union all
    select 2 a1,'y' a2 from dual
    union all
    select 2 a1,'z' a2 from dual
    )
    select a1,replace(wm_concat(a2),',') a3 from temp group by a1
      

  4.   


    这么复杂,我还以为用all之后会简单点select distinct  name from table where name not in(select distinct name from table where fenshu<60)
      

  5.   

    SELECT NAME FROM t WHERE t.name NOT IN (SELECT NAME FROM t WHERE t.fenshu <=80) 是这个意思么?
      

  6.   


    同意此内容 效率高些
    不过有地方的改下
    select name from temp  group by name having min(fenshu) > 80