天天看点

Oracle 各种语法(二)

 1、列转行

Student表基本数据(转换前)

  1. ID    数学成绩    语文成绩 
  2. 1        80          70 
  3. 2        70          80 
  4. 3        69          73 
  5. 4        86          84 

转行后欲得到:

  1. ID        成绩 
  2. 1          80 
  3. 1          70 
  4. 2          70 
  5. 2          80 
  6. 3          69 
  7. 3          73 
  8. 4          86 
  9. 4          84 

sql语句:

  1. SELECT ID,MAX(数学成绩) AS 成绩 FROM Student GROUP BY ID   
  2.   UNION ALL  
  3.   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:

  1. SELECT T1.BM_ID,T1.BMMC,WMSYS.WM_CONCAT(T3.RYXM) RYXM  FROM DEPARTMENT T1 
  2.       LEFT JOIN EMPLOYEE_DEPARTMENT T2 ON T2.BM_ID = T1.BM_ID 
  3.       LEFT JOIN EMPLOYEE T3 ON T3.RY_ID = T2.RY_ID 
  4. GROUP BY T1.BM_ID,T1.BMMC