iyth888 发表于 2018-9-26 09:10:39

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]
查看完整版本: Oracle 各种语法(二)