老师的最后一讲的答案是什么啊,有点迷茫......
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
但是这个wm_concat没有排序怎么处理的
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
精简:
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;
得到的结果是一样的。
第一步:利用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 张三,赵六