例如,有三个链接的表。我知道在使用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
由于
答案 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