У меня есть запрос Oracle, который в настоящее время отображает все мои данные
$qu = 'SELECT * FROM baan.tcbpur012777 WHERE T$RQNO LIKE :bagian GROUP BY tcbpur012777.T$RQNO ORDER BY T$RQNO OFFSET '.$start.' ROWS FETCH NEXT '.$perPage.' ROWS ONLY';
$r = oci_parse($conn, $qu);
oci_bind_by_name($r,':bagian',$bag);
oci_execute($r);
$n = oci_fetch_all($r, $q);
То, что я хочу сделать, это сгруппировать дублированные данные в одно, но каждый раз, когда я использую группу по синтаксису, появится предупреждение и сделает мой синтаксис недействительным.
Warning: oci_fetch_all(): ORA-24374: define not done before fetch or execute and fetch in
Кто-нибудь может сказать, пожалуйста, что не так с моим синтаксисом?
заранее спасибо
Ты делаешь:
SELECT *
FROM table_name
GROUP BY column_name
Вам нужно либо включить все столбцы в GROUP BY
пункт или для каждого столбца не в GROUP BY
пункт вам нужно использовать функция агрегации объединить это по группе. Предполагая, что ваша таблица имеет более одного столбца, то SELECT *
получит все эти столбцы, но GROUP BY column_name
группируется только по одному из столбцов, а другие столбцы не являются частью агрегации, поэтому ORA-00979 not a group by expression
исключение.
Что-то вроде:
SELECT T$RQNO,
MAX( Col1 ) AS MaxCol1,
MIN( Col2 ) AS MinCol2,
LISTAGG( Col3, ',' ) WITHIN GROUP ( ORDER BY Col4 ) AS ListOfCol3
FROM baan.tcbpur012777
WHERE T$RQNO LIKE :bagian
GROUP BY T$RQNO
ORDER BY T$RQNO
OFFSET '.$start.' ROWS
FETCH NEXT '.$perPage.' ROWS ONLY
Других решений пока нет …