2013-06-27 2 views
0

Я получаю ошибку выше хода следующего запросаора-00979 не GROUP BY ошибки выражения

SELECT TO_CHAR(EVENTDATA.TIME_STAMP,'YYYY/IW'), 
    COUNT(EVENT_TYPE) 
FROM EVENTDATA 
INNER JOIN CLIENTDATA 
ON CLIENTDATA.CLIENT_ID  = EVENTDATA.EVENT_ID 
WHERE CLIENTDATA.CLIENT_STATUS = 0 
AND EVENTDATA.EVENT_TYPE  = 0 
AND EVENTDATA.time_stamp  > to_date('2013-04-03 20:03:20', 'yyyy-mm-dd HH24:MI:SS') 
GROUP BY TO_CHAR(EVENTDATA.TIME_STAMP,'YYYY/IW') 
ORDER BY TO_CHAR(EVENTDATA.TIME_STAMP,'YYYY/IW') 

Вот как таблицы были созданы

CREATE TABLE "DIMA"."CLIENTDATA" 
    (
    "CLIENT_ID"  VARCHAR2(256 BYTE) NOT NULL ENABLE, 
    "CLIENT_STATUS" NUMBER(10,0) NOT NULL ENABLE, 
    CONSTRAINT "CLIENTDATA_PK" PRIMARY KEY ("CLIENT_ID") 
); 

CREATE TABLE "DIMA"."EVENTDATA" 
    (
    "EVENTDATA_ID" NUMBER NOT NULL ENABLE, 
    "EVENT_ID"  VARCHAR2(256 BYTE), 
    "EVENT_TYPE"  NUMBER(10,0) NOT NULL ENABLE, 
    "TIME_STAMP" DATE, 
    CONSTRAINT "EVENTDATA_PK" PRIMARY KEY ("EVENTDATA_ID") 
); 

Я бег запроса через ojbc водитель и получил Java трассировки стека ниже

Error executing SQL query "SELECT TO_CHAR(EVENTDATA.TIME_STAMP,'YYYY/IW'), COUNT(EVENT_TYPE) FROM EVENTDATA INNER JOIN CLIENTDATA ON CLIENTDATA.CLIENT_ID  = EVENTDATA.EVENT_ID WHERE CLIENTDATA.CLIENT_STATUS = 0 AND EVENTDATA.EVENT_TYPE  = 0 AND EVENTDATA.time_stamp  > to_date('2013-04-03 20:03:20', 'yyyy-mm-dd HH24:MI:SS') GROUP BY TO_CHAR(EVENTDATA.TIME_STAMP,'YYYY/IW') ORDER BY TO_CHAR(EVENTDATA.TIME_STAMP,'YYYY/IW')". err: java.sql.SQLSyntaxErrorException: ORA-00979: not a GROUP BY expression 

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395) 
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802) 
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436) 
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) 
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521) 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205) 
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:861) 
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1145) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1267) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3493) 
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491) 
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92) 
    at org.datanucleus.store.rdbms.SQLController.executeStatementQuery(SQLController.java:450) 
    at org.datanucleus.store.rdbms.query.SQLQuery.performExecuteInternal(SQLQuery.java:410) 
    at org.datanucleus.store.query.Query$1.run(Query.java:1652) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.lang.Thread.run(Thread.java:619) 

Похоже, я положил все столбцы SELECT, в GROUP BY заявление excep t функции группировки (COUNT).

Как я могу это решить. Спасибо, Dima

+1

Можете ли вы показать нам инструкции создания таблиц. Я пробовал ваш запрос и не получил ошибку ORA-00979!?! –

+0

Oracle бросает ORA-00979, когда предложение GROUP BY не соответствует неагрегатным столбцам в проекте. Это, похоже, не так, как подтверждает @ wolφi. Итак, вы уверены, что это код, который вы фактически используете? – APC

+0

Обновлено с помощью операторов создания таблицы –

ответ

0

Я слишком ленив, чтобы проверить ваше заявление.

Предлагаю использовать подзадачу. Это должно работать:

SELECT 
    D.EVENT_TIME, 
    COUNT(D.EVENT_TYPE) AS EVENT_TYPE_COUNT 
FROM (
    SELECT 
    TO_CHAR(EVENTDATA.TIME_STAMP,'YYYY/IW') AS EVENT_TIME, 
    EVENT_TYPE 
    FROM EVENTDATA 
    INNER JOIN CLIENTDATA 
    ON CLIENTDATA.CLIENT_ID  = EVENTDATA.EVENT_ID 
    WHERE CLIENTDATA.CLIENT_STATUS = 0 
    AND EVENTDATA.EVENT_TYPE  = 0 
    AND EVENTDATA.time_stamp  > to_date('2013-04-03 20:03:20', 'yyyy-mm-dd HH24:MI:SS') 
) D 
GROUP BY D.EVENT_TIME 
ORDER BY D.EVENT_TIME; 

 Смежные вопросы

  • Нет связанных вопросов^_^