问答详情
源自:5-5 练习

求各位大神解答

老师的最后一讲的答案是什么啊,有点迷茫......

提问者:changeWorld 2015-08-18 17:27

个回答

  • 立志成为Oracle大神的男人
    2016-06-04 22:41:33

    select c.ci_id,max(x)

    from

    (select a.ci_id,wm_concat(case when instr(a.stu_ids,b.stu_id)> 0 then b.stu_name

    end ) over(partition BY  a.ci_id order by b.stu_id)x

    from pm_ci a,pm_stu b)c

    group by c.ci_id



  • 黄虎成
    2016-02-22 11:44:11

    但是这个wm_concat没有排序怎么处理的


  • zdong
    2015-11-19 18:17:10

    select ci.ci_id,to_char(wm_concat(stu.stu_name)) STU_NAME

    from pm_ci ci, PM_STU stu

    where instr(ci.stu_ids,stu.stu_id) > 0 

    group by ci.ci_id


  • 雲中菩提
    2015-09-19 16:56:02

    精简:

    SELECT c.ci_id ,wm_concat(s.stu_name)  
      FROM pm_ci c , pm_stu s 
      WHERE INSTR(c.stu_ids,s.stu_id)>0
      GROUP BY c.ci_id;

    得到的结果是一样的。

  • 雲中菩提
    2015-09-19 16:53:49

    第一步:利用instr为条件,多表连接查询。

    SELECT c.ci_id,s.stu_name FROM pm_ci c,pm_stu s WHERE instr(c.stu_ids,s.stu_id)!=0;

    运行结果:

    CI_ID  STU_NAME

    1         张三

    1         李四

    1         王五

    1         赵六

    2         张三

    2         赵六


    第二步:利用 wn_concat() 函数 和 GROUP BY  重新组合字段

    SELECT c.ci_id,WM_CONCAT(c.stu_name)
     FROM(SELECT c.ci_id,s.stu_name 
    	FROM pm_ci c,pm_stu s 
            WHERE INSTR(c.stu_ids,s.stu_id)!=0) c
     GROUP BY c.CI_ID;

    运行结果:

    CI_ID     WM_CONCAT(C.STU_NAME)

    1            张三,赵六,王五,李四

    2            张三,赵六