Все столбцы из SELECT
, которые не агрегированы, должны быть частью предложения GROUP BY
.
Из-за этого вам не нужно DISTINCT
, потому что GROUP BY
все равно будет возвращать различные значения.
В вашем запросе это будет
select
count(pi.port),
pi.RACK, pi.SHELF, pi.SLOT, pi.PORT, pi.BROADBAND_CIRCUIT_ID, --> put all those
d.DSLAM, d.VENDOR, trim(d.model) --> into GROUP BY
from ...
group by
pi.RACK, pi.SHELF, pi.SLOT, pi.PORT, pi.BROADBAND_CIRCUIT_ID,
d.DSLAM, d.VENDOR, trim(d.model)
[РЕДАКТИРОВАТЬ, чтобы показать, что такая GROUP BY действительно работает]
Данные на самом деле не имеют значения; Мне было лень создавать умнее тестовый пример (так как вы тоже не против опубликовать свой собственный). Это просто, чтобы показать, что запрос не вызывает ошибку, которую вы сказали, что это будет.
SQL> with
2 table1 (id, port, rack, shelf, slot, broadband_circuit_id, circuit_id) as
3 (select 1, 1, 1, 1, 1, 1, 1 from dual),
4 table2 (id, model, vendor, dslam) as
5 (select 1, 1, 1, 1 from dual),
6 table3 (circuit_id) as
7 (select 1 from dual)
8 -- query goes here
9 select
10 count(pi.port) cnt,
11 pi.RACK, pi.SHELF, pi.SLOT, pi.PORT, pi.BROADBAND_CIRCUIT_ID,
12 d.DSLAM, d.VENDOR, trim(d.model)
13 -- your FROM clause
14 from
15 table1 pi,
16 table2 d,
17 table3 c
18 where
19 pi.id = d.id and
20 pi.circuit_id = c.circuit_id
21 and ((trim(d.model) not in ('TA5000','TA5004','TA5006','TA1248','TA1248V'))
22 or ( (trim(d.model) not in ('C7','E7') or trim(d.model) not like '%E3-48CR2%' or trim(d.model)
not like '%E3-48R2%') ) )
23 -- my GROUP BY clause
24 group by
25 pi.RACK, pi.SHELF, pi.SLOT, pi.PORT, pi.BROADBAND_CIRCUIT_ID,
26 d.DSLAM, d.VENDOR, trim(d.model)
27 order by d.VENDOR;
CNT RACK SHELF SLOT PORT BROADBAND_CIRCUIT_ID DSLAM VENDOR T
---------- ---------- ---------- ---------- ---------- -------------------- ---------- ---------- -
1 1 1 1 1 1 1 1 1
SQL>