按多行分组

时间:2016-09-28 23:17:41

标签: sql oracle

表:

a: org1, class, class_id
b: org2, class, class_id

我做了left outer join b on a.class_id = b.class_id

结果:

  org1  |  org 2  | class
--------+---------+------------------
ENGLISH | ENGLISH | English 101
ENGLISH | ENGLISH | English 220
ENGLISH | COMM    | Communication 360
ENGLISH | HISTORY | History 362
HISTORY | ENGLISH | English 366

我想知道是否可以通过SQL实现以下分组,或者使用上面的结果数据集进行编程?

ORG: ENGLISH
     -----------------
     English 101       
     English 220         
     Communication 360
     History 362
     English 366
     -----------------
ORG: HISTORY
     -----------------
     English 366
     History 362
     -----------------
     COMM
     -----------------
     Communication 360
  • 任何带有英语org1或org2的班级都应在ENGLISH org。
  • 下展示
  • 任何具有HISTORY org1或org2的类都应显示在HISTORY组织下。
  • 任何具有COMM org1或org2的类都应显示在COMM org。
  • 如果他们有另一个组织(通讯360是ENGLISH / COMM),它应显示在两个 ENGLISH组织和COMM组织下。

1 个答案:

答案 0 :(得分:3)

使用UNION

SELECT t.org, t.class
FROM
(
    SELECT org1 AS org, class
    FROM a
    UNION ALL
    SELECT org2 AS org, class
    FROM b
) t
ORDER BY t.org, t.class

编辑:(由戈登)

您不需要子查询:

    SELECT org1 AS org, class
    FROM a
    UNION ALL
    SELECT org2 AS org, class
    FROM b
    ORDER BY org, class;

ORDER BY适用于union all结果