--楼主数据描述不清楚 只能猜测 如下
SQL> with t("教师号",b,c) as (
2 select '1' ,'2' ,'有' from dual
3 union all
4 select '1' ,'3' ,'有' from dual
5 union all
6 select '2' ,'1' ,'有' from dual
7 union all
8 select '3' ,'2' ,'有' from dual
9 union all
10 select '1' ,'2' ,'有' from dual)
11 SELECT * FROM (
12 SELECT "教师号",b FROM T WHERE c ='有')
13 PIVOT (COUNT(*) FOR b IN ('1' AS "星期一",'2' AS "星期二",'3'AS "星期三"))
14 ORDER BY 1
15 /
教师号 星期一 星期二 星期三
------ ---------- ---------- ----------
1 0 2 1
2 1 0 0
3 0 1 0