Oracle 各种语法(二)
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) RYXMFROM 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
不断补充中...
页:
[1]