1、先去重,可以考虑开创函数 over (partition by ...); 2、在考虑行转列、列转行,Oracle里有 pivot和unpivot; 3、最好贴格式化代码和截图,准备给你建个表导数据试一下的,但是没明白具体需求,先上班了,有问题再问。
1、先去重,可以考虑开窗函数 over (partition by ...); 2、再考虑行转列、列转行,Oracle里有 pivot和unpivot; 3、最好贴格式化代码和截图,准备给你建个表导数据试一下的,但是没明白具体需求,先上班了,有问题再问。 【上面一个帖子太匆忙有错别字】
--楼主数据描述不清楚 只能猜测 如下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 /
2、在考虑行转列、列转行,Oracle里有 pivot和unpivot;
3、最好贴格式化代码和截图,准备给你建个表导数据试一下的,但是没明白具体需求,先上班了,有问题再问。
2、再考虑行转列、列转行,Oracle里有 pivot和unpivot;
3、最好贴格式化代码和截图,准备给你建个表导数据试一下的,但是没明白具体需求,先上班了,有问题再问。
【上面一个帖子太匆忙有错别字】
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