1、列转行
Student表基本数据(转换前)
- ID 数学成绩 语文成绩
- 1 80 70
- 2 70 80
- 3 69 73
- 4 86 84
转行后欲得到:
- ID 成绩
- 1 80
- 1 70
- 2 70
- 2 80
- 3 69
- 3 73
- 4 86
- 4 84
sql语句:
- SELECT ID,MAX(数学成绩) AS 成绩 FROM Student GROUP BY ID
- UNION ALL
- SELECT ID,MAX(语文成绩) AS 成绩 FROM Student GROUP BY ID
(据说Oracle11g中Pivot与Unpivot可以实现行列转换,由于我这边环境只有Oracle10g,无法验证,有兴趣的朋友可以深究一下)
2、合并行(WMSYS.WM_CONCAT)
现在有2个表,分别是department,employee表,2个表的关系是多对多,中间表是employee_department
需求是:得到各部门下的人名,显示的列:部门id、部门名称、该部门下人员名称。
sql:
- SELECT T1.BM_ID,T1.BMMC,WMSYS.WM_CONCAT(T3.RYXM) RYXM FROM DEPARTMENT T1
- LEFT JOIN EMPLOYEE_DEPARTMENT T2 ON T2.BM_ID = T1.BM_ID
- LEFT JOIN EMPLOYEE T3 ON T3.RY_ID = T2.RY_ID
- GROUP BY T1.BM_ID,T1.BMMC