如何打破多个表格

时间:2015-05-05 02:16:21

标签: sql oracle sqlplus

例如,有三个链接的表。我知道在使用select语句时,可以使用break on来获取列的唯一值。我的问题是如何在select语句中使用多个表来使用break。这是我现在的代码。

CLEAR BREAKS
BREAK ON STR.STR_NUM SKIP 1 ON STR.STR_QTY SKIP 1

SELECT STR.STR_NUM, STR.STR_QTY, SUPP.SUPP_ID,SUPP.SUPP_COMP
FROM STR
INNER JOIN SUPPSTR 
ON STR.STR_NUM = SUPPSTR.STR_NUM 
INNER JOIN SUPP
ON SUPP.SUPP_ID = SUPPSTR.SUPP_ID    
ORDER BY STR.STR_NUM,STR.STR_QTY,SUPP.SUPP_ID ASC; 

这给了我多个STR_NUM值,每个值与每个QTY和COMP匹配。但是我不想要重复STR_NUM和STR_QTY(只有SUPP_ID和SUPP_COMP),我试图通过BREAK来完成,但它不起作用。

我似乎只能在一张桌子上使用Break。

例如,我会得到这样的输出:

STR_NUM   STR_QTY   SUPP_ID  SUPP_COMP
1001      120       101       AA
1001      120       102       AB
1001      120       103       AC
1002      300       101       AA
1002      300       102       AB
1002      300       103       AC
1002      300       104       AD
1003      100       101       AA
1003      100       102       AB
1003      100       103       AC
1004      50        101       AA
1004      50        102       AB

但我想要的是这样的:

STR_NUM   STR_QTY   SUPP_ID  SUPP_COMP
1001      120       101       AA
                    102       AB
                    103       AC

1002      300       101       AA
                    102       AB
                    103       AC
                    104       AD

1003      100       101       AA  
                    102       AB
                    103       AC

由于

1 个答案:

答案 0 :(得分:2)

22:24:25 (21)HR@sandbox> select * from (select department_id, job_id, employee_id from employees order by 1,2,3) where rownum < 15;

DEPARTMENT_ID JOB_ID     EMPLOYEE_ID
------------- ---------- -----------
           10 AD_ASST            200
           20 MK_MAN             201
           20 MK_REP             202
           30 PU_CLERK           115
           30 PU_CLERK           116
           30 PU_CLERK           117
           30 PU_CLERK           118
           30 PU_CLERK           119
           30 PU_MAN             114
           40 HR_REP             203
           50 SH_CLERK           180
           50 SH_CLERK           181
           50 SH_CLERK           182
           50 SH_CLERK           183

14 rows selected.

Elapsed: 00:00:00.00
22:24:49 (21)HR@sandbox> break on department_id on job_id
22:24:55 (21)HR@sandbox> /

DEPARTMENT_ID JOB_ID     EMPLOYEE_ID
------------- ---------- -----------
           10 AD_ASST            200
           20 MK_MAN             201
              MK_REP             202
           30 PU_CLERK           115
                                 116
                                 117
                                 118
                                 119
              PU_MAN             114
           40 HR_REP             203
           50 SH_CLERK           180
                                 181
                                 182
                                 183

14 rows selected.

Elapsed: 00:00:00.04

是的,这与查询中的表数量无关。 BREAK不是sql而是sqlplus运算符,它只处理查询输出而不受查询详细信息的影响。多表示例:

22:31:07 (21)HR@sandbox> break
break on department_name nodup
          on job_id nodup

22:31:15 (21)HR@sandbox> l
  1  select * from (
  2  select d.department_name, e.job_id, e.employee_id
  3    from employees e join departments d using(department_id)
  4   order by 1,2,3
  5* ) where rownum < 15
22:31:15 (21)HR@sandbox> /

DEPARTMENT_NAME                JOB_ID     EMPLOYEE_ID
------------------------------ ---------- -----------
Accounting                     AC_ACCOUNT         206
                               AC_MGR             205
Administration                 AD_ASST            200
Executive                      AD_PRES            100
                               AD_VP              101
                                                  102
Finance                        FI_ACCOUNT         109
                                                  110
                                                  111
                                                  112
                                                  113
                               FI_MGR             108
Human Resources                HR_REP             203
IT                             IT_PROG            103

14 rows selected.

Elapsed: 00:00:00.10