| 发表于:2007-10-26 18:51:383楼 得分:0 |
哇哈哈,奋斗了又一下午,终于把这个sql写出来了! select t2.school_id, t2.grade, count(t2.subject_id) subject_count, max(t2.subject_cd1) subject_cd1, max(t2.subject_cd2) subject_cd2, max(t2.subject_cd3) subject_cd3, max(t2.people_count1) people_count1, max(t2.people_count2) people_count2, max(t2.people_count3) people_count3 from ( select t1.school_id,t1.grade,t1.subject_id, case t1.row when 1 then t1.subject_cd else null end subject_cd1, case t1.row when 2 then t1.subject_cd else null end subject_cd2, case t1.row when 3 then t1.subject_cd else null end subject_cd3, case t1.row when 1 then t1.people_count else null end people_count1, case t1.row when 2 then t1.people_count else null end people_count2, case t1.row when 3 then t1.people_count else null end people_count3, from ( select frownumber()over(partition by school_id,grade,subject_id) as row, school_id, grade, subject_id, count(student_id) people_count from t group by school_id,grade,subject_id ) t1 ) t2 我不能保证这是最好的写法,也许还有优化解,希望朋友们拿出来讨论。 如果我看到比较好的解决方案,一样会给分的。 | | |
|