Not a GROUP BY expression - Oracle 10g bug?

Hi,
I am geting 00979. 00000 - "not a GROUP BY expression" error on Oracle 10g 10.2.0.4.0 - 64bit Production.
To illustrate my problem I created following example.
Let think I have some shop with clothes. Everytime I sell something, I store this information in the database - storing actual time, clothes type (trousers, socks, ...) and the size of the piece (M, L, XL, ...).
Now, system counts statistics every hour. So it goes thrue the table with sold pieces and counts the number of pieces per clothes type and per size from the beginning of the day. It is important to realize that it is from the beginning of the day. Because of that, the number of sold pieces in the statistical table grows every hour (or is at least on the same value as in previous hour).
Now, from this statistical table I need to make new statistic. I want a statistic how many pieces per size I sold every hour.
I created this query for that:
SELECT TIME, xSIZE, (SOLD  - NVL((SELECT SUM(S1.SOLD)
                                  FROM STATISTICS S1
                                  WHERE S1.xSIZE = S.xSIZE
                                    AND TRUNC(S1.TIME, 'HH24') + 1/24 = S.TIME
                                    AND TO_CHAR(S1.TIME, 'HH24') != '23'
                                    AND S1.xSIZE IS NOT NULL
                                  GROUP BY TRUNC(S1.TIME, 'HH24'), S1.xSIZE),0)) SOLD
FROM(
SELECT TRUNC(S.TIME, 'HH24') TIME, S.xSIZE, SUM(S.SOLD) SOLD
FROM STATISTICS S
WHERE S.xSIZE IS NOT NULL
GROUP BY TRUNC(S.TIME, 'HH24'), S.xSIZE
--ORDER BY 1 DESC
) S
ORDER BY TIME DESC, xSIZE ASCFirst I select number of sold pieces per hour per size. To get number of sold pieces for particular hour, I need to substract from this value number of sold pieces from previous hour. I decided to do this with parameter query...
Running the query like this I get "not a GROUP BY expression" error. However if I uncomment the "ORDER BY 1 DESC" statement, the query works. I am pretty sure it has to do something with this line:
AND TRUNC(S1.TIME, 'HH24') + 1/24 = S.TIME
If you modify this query like this:
SELECT TIME, xSIZE, (SOLD  - NVL((SELECT SUM(S1.SOLD)
                                  FROM STATISTICS S1
                                  WHERE S1.xSIZE = S.xSIZE
                                    --AND TRUNC(S1.TIME, 'HH24') + 1/24 = S.TIME
                                    AND TO_CHAR(S1.TIME, 'HH24') != '23'
                                    AND S1.xSIZE IS NOT NULL
                                  GROUP BY  S1.xSIZE),0)) SOLD
FROM(
SELECT TRUNC(S.TIME, 'HH24') TIME, S.xSIZE, SUM(S.SOLD) SOLD
FROM STATISTICS S
WHERE S.xSIZE IS NOT NULL
GROUP BY TRUNC(S.TIME, 'HH24'), S.xSIZE
--ORDER BY 1 DESC
) S
ORDER BY TIME DESC, xSIZE ASCRemoved joining the tables on truncated time and grouping by the truncated time -> The query does not fail...
And now the best...if you run the first query on Oracle 11g (Release 11.1.0.6.0 - 64bit Production), it works.
Does anybody know why is the first query not working on 10g? Is there some bug or limitation for this server version?
Please don't say me to rewrite the query in another way, I already did it, so it works on 10g as well. I am just curious why it doesn't work on 10g.
Finally here are some data for testing.
CREATE TABLE STATISTICS(
  TIME DATE DEFAULT SYSDATE,
  TYPE VARCHAR2(20),
  xSIZE VARCHAR2(2),
  SOLD NUMBER(5,0) DEFAULT 0
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 2/24, 'T-Shirt', 'M', 10);
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 2/24, 'Socks', 'M', 3);
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 2/24, 'T-Shirt', 'L', 1);
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 2/24, 'Socks', 'L', 50);
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 2/24, 'Trousers', 'XL', 7);
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 2/24, 'Socks', 'XL', 3);
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 1/24, 'T-Shirt', 'M', 13);
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 1/24, 'Socks', 'L', 60);
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 1/24, 'Trousers', 'XL', 15);
INSERT INTO STATISTICS(TIME, TYPE, xSIZE, SOLD) VALUES(SYSDATE - 1/24, 'Socks', 'XL', 6);Edited by: user12047225 on 20.9.2011 23:12
Edited by: user12047225 on 20.9.2011 23:45

It is a known issue when optimizer decides to expand in-line view. You can add something (besides ORDER BY you already used) to in-line view to prevent optimizer from expanding it. For example:
SQL> SELECT  TIME,
  2          xSIZE,
  3          (SOLD - NVL(
  4                      (
  5                       SELECT  SUM(S1.SOLD)
  6                         FROM  STATISTICS S1
  7                         WHERE S1.xSIZE = S.xSIZE
  8                           AND TRUNC(S1.TIME, 'HH24') + 1/24 = S.TIME
  9                           AND TO_CHAR(S1.TIME, 'HH24') != '23'
10                           AND S1.xSIZE IS NOT NULL
11                           GROUP BY TRUNC(S1.TIME, 'HH24'),
12                                    S1.xSIZE
13                      ),
14                      0
15                     )
16          ) SOLD
17    FROM  (
18           SELECT  TRUNC(S.TIME, 'HH24') TIME,
19                   S.xSIZE,
20                   SUM(S.SOLD) SOLD
21             FROM  STATISTICS S
22             WHERE S.xSIZE IS NOT NULL
23             GROUP BY TRUNC(S.TIME, 'HH24'),
24                      S.xSIZE
25           --ORDER BY 1 DESC
26          ) S
27    ORDER BY TIME DESC,
28             xSIZE ASC
29  /
         SELECT  TRUNC(S.TIME, 'HH24') TIME,
ERROR at line 18:
ORA-00979: not a GROUP BY expression
SQL> SELECT  TIME,
  2          xSIZE,
  3          (SOLD - NVL(
  4                      (
  5                       SELECT  SUM(S1.SOLD)
  6                         FROM  STATISTICS S1
  7                         WHERE S1.xSIZE = S.xSIZE
  8                           AND TRUNC(S1.TIME, 'HH24') + 1/24 = S.TIME
  9                           AND TO_CHAR(S1.TIME, 'HH24') != '23'
10                           AND S1.xSIZE IS NOT NULL
11                           GROUP BY TRUNC(S1.TIME, 'HH24'),
12                                    S1.xSIZE
13                      ),
14                      0
15                     )
16          ) SOLD
17    FROM  (
18           SELECT  TRUNC(S.TIME, 'HH24') TIME,
19                   S.xSIZE,
20                   SUM(S.SOLD) SOLD,
21                   ROW_NUMBER() OVER(ORDER BY SUM(S.SOLD)) RN
22             FROM  STATISTICS S
23             WHERE S.xSIZE IS NOT NULL
24             GROUP BY TRUNC(S.TIME, 'HH24'),
25                      S.xSIZE
26           --ORDER BY 1 DESC
27          ) S
28    ORDER BY TIME DESC,
29             xSIZE ASC
30  /
TIME      XS       SOLD
20-SEP-11 L           9
20-SEP-11 M           0
20-SEP-11 XL         11
20-SEP-11 L          51
20-SEP-11 M          13
20-SEP-11 XL         10
6 rows selected.
SQL> Or use subquery factoring (WITH clause) + undocumented hint MATERIALIZE:
SQL> WITH S AS (
  2             SELECT  /*+ MATERIALIZE */ TRUNC(S.TIME, 'HH24') TIME,
  3                     S.xSIZE,
  4                     SUM(S.SOLD) SOLD
  5               FROM  STATISTICS S
  6               WHERE S.xSIZE IS NOT NULL
  7               GROUP BY TRUNC(S.TIME, 'HH24'),
  8                        S.xSIZE
  9             --ORDER BY 1 DESC
10            )
11  SELECT  TIME,
12          xSIZE,
13          (SOLD - NVL(
14                      (
15                       SELECT  SUM(S1.SOLD)
16                         FROM  STATISTICS S1
17                         WHERE S1.xSIZE = S.xSIZE
18                           AND TRUNC(S1.TIME, 'HH24') + 1/24 = S.TIME
19                           AND TO_CHAR(S1.TIME, 'HH24') != '23'
20                           AND S1.xSIZE IS NOT NULL
21                           GROUP BY TRUNC(S1.TIME, 'HH24'),
22                                    S1.xSIZE
23                      ),
24                      0
25                     )
26          ) SOLD
27    FROM  S
28    ORDER BY TIME DESC,
29             xSIZE ASC
30  /
TIME      XS       SOLD
20-SEP-11 L           9
20-SEP-11 M           0
20-SEP-11 XL         11
20-SEP-11 L          51
20-SEP-11 M          13
20-SEP-11 XL         10
6 rows selected.
SQL> SY.

Similar Messages

  • ORA-00979: not a GROUP BY expression on different oracle version

    Hi,
    I tried below sql on different database and I'm having a strange result.
    error is ORA-00979: not a GROUP BY expression
    SELECT COUNT(*) OVER() CNT,
    COUNT(member_id) AS cnt2,
    etoc_type,
    journal_id,
    volume_id,
    issue_id,
    current_registered_users,
    date_sent,
    date_order,
    (COUNT(member_id) -
    (Select Count( *)
    FROM oracjoc.email_alert_bounce_backs bb
    WHERE aa.journal_id = bb.journal_id
    AND aa.volume_id = bb.volume_id
    AND aa.issue_id = bb.issue_id
    AND aa.etoc_type = bb.etoc_type
    AND aa.date_sent = TO_CHAR(bb.date_sent, 'ddMonYYYY')
    )) delivered
    FROM
    (SELECT member_id,
    etoc_type,
    journal_id,
    volume_id,
    issue_id,
    current_registered_users,
    TO_CHAR(date_sent, 'ddMonyyyy') date_sent,
    To_Number(To_Char(Date_Sent, 'yyyymmdd')) Date_Order
    FROM oracjoc.Report_Issue_Alert
    WHERE Etoc_Type = '1'
    ) Aa
    GROUP BY Journal_Id,
    Volume_Id,
    Issue_Id,
    Etoc_Type,
    Current_Registered_Users,
    Date_Order,
    Date_Sent
    ORDER BY date_order DESC
    Oracle version:
    Oracle Database 11g Release 11.1.0.7.0 - 64bit Production: I got failed result on this one
    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production: sql was successfully executed.
    Can someone explain is this still a part of bug on non enterprise edition?, TIA!

    919272 wrote:
    Hi,
    I tried below sql on different database and I'm having a strange result.
    error is ORA-00979: not a GROUP BY expressionRead the full error message. It has also a row and a column number specified. Use this number to find out which column gives you the trouble.
    I see that there are several not needed date to char conversions. I could imaging that they confuse the query merge mechanism. Other than that: try to strip down the query to the smallest posisble set of colum combination. So that you can see where the error comes from.
    SELECT COUNT(*) OVER() CNT,
    COUNT(*) AS cnt2,
    etoc_type,
    journal_id,
    volume_id,
    issue_id,
    current_registered_users,
    date_sent2,
    (COUNT(*) -
      (Select Count( *)
        FROM oracjoc.email_alert_bounce_backs bb
        WHERE aa.journal_id = bb.journal_id
        AND aa.volume_id = bb.volume_id
        AND aa.issue_id = bb.issue_id
        AND aa.etoc_type = bb.etoc_type
        AND aa.date_sent2 = trunc(bb.date_sent)
        )) delivered
    FROM  (SELECT member_id, etoc_type, journal_id, volume_id, issue_id, current_registered_users,
           trunc(date_sent) date_sent2,
    FROM oracjoc.Report_Issue_Alert
    WHERE Etoc_Type = '1'
    ) Aa
    GROUP BY Journal_Id, Volume_Id, Issue_Id, Etoc_Type, Current_Registered_Users, Date_Sent2
    ORDER BY Date_Sent2 DESC

  • Why i can't not create new database in oracle 10g express

    why i can't not create new database in oracle 10g express?
    should i use oracle 11g standard edition?
    thanks

    In Oracle a schema is what a 'database' is in Sqlserver.
    And if you would have been aware about the limitations of XE, you would have known you can only create *1* (one) database using Oracle XE.
    However, probably you don't need a new database at all, and a schema will suffice.
    Sybrand Bakker
    Senior Oracle DBA

  • "ORA-00979: not a GROUP BY expression" in Oracle11g R2 (11.2.0.3).

    Hi,
    We have a query which is working in 10g and giving error "ORA-00979: not a GROUP BY expression" in Oracle11g R2 (11.2.0.3). we have found following two solution to resolve it from the internet.
    1)You can Set the hidden parameter “_FIX_CONTROL”=’5520732:OFF’ in the pfile. This parameter disables a given bug number.
    2)We can set the parameter optimizer_features_enable to a previous version of Oracle, ’11.1.0.7′
    but I am unable to find the side effects of above change, so I need to know:
    1)whcih is batter solution
    2)what are the possible side effects of both solution.

    Hi Fran,
    Please find the below query.
    SELECT DECODE(TEMP.TENOR_IND, 'L', TEMP.SHORT_NAME, NULL) PRODUCT_NAME,
    TEMP.BA_PRODTYPE_ID,
    TEMP.TENOR,
    TEMP.PERIOD_TYPE,
    TEMP.PERIOD_VALUE,
    SUM(TEMP.LIMIT_BASE_AMOUNT),
    SUM(TEMP.PNDG_LIMIT_BASE_AMOUNT),
    SUM(TEMP.GROSS_EXP_BASE_AMOUNT),
    SUM(TEMP.NETT_EXP_BASE_AMOUNT),
    SUM(TEMP.COLLATERAL_BASE_AMOUNT),
    TEMP.TENOR_IND,
    MAX(TEMP.COB_DATE),
    TEMP.CRP_PRODUCT_GROUP
    FROM (SELECT /*+INDEX(LIM BUS_CB_LIMIT_INDX01) INDEX(btpd BUS_TP_PORTFOLIO_DTLS_INDX02)*/
    MCBPT.BA_PRODTYPE_ID,
    DECODE(LIM.TENOR_IND, 'L', MCBPT.SHORT_NAME, NULL),
    LIM.LIMIT_ID,
    LIM.LIMIT_TYPE_ID,
    LIM.LIMIT_STATUS,
    LIM.OWNER_ID,
    LIM.PERIOD_TYPE,
    LIM.PERIOD_VALUE,
    LIM.LIMIT_CURR,
    LIM.LIMIT_BASE_AMOUNT,
    LIM.GROSS_EXP_BASE_AMOUNT,
    DECODE(LIM.PERIOD_TYPE,
    5,
    'Inf',
    (TO_CHAR(LIM.PERIOD_VALUE) || '-' ||
    DECODE(LIM.PERIOD_TYPE, 4, 'Y', 3, 'M', 2, 'W', 1, 'D'))) TENOR,
    LIM.TENOR_SET_ID,
    LIM.PNDG_LIMIT_CURR,
    LIM.PNDG_LIMIT_BASE_AMOUNT,
    LIM.NETT_EXP_BASE_AMOUNT,
    LIM.COLLATERAL_BASE_AMOUNT,
    LIM.COB_DATE,
    LIM.TENOR_IND,
    MCBPT.CRP_PRODUCT_GROUP,
    MCBPT.SHORT_NAME
    FROM BUS_CB_LIMIT LIM,
    BUS_TP_PORTFOLIO_DETAILS BTPD,
    MST_CB_BA_PRODUCT_TYPE MCBPT
    WHERE BTPD.ORG_ID = 108503
    AND EXISTS
    (SELECT ORG_ID
    FROM BUS_CA_CORPORATE
    WHERE ORG_STAT IN (1, 2, 4, 7, 8, 9, 22, 24, 25)
    AND BTPD.BOOKING_ENTITY = ORG_ID
    START WITH ORG_ID = 894
    CONNECT BY PRIOR ORG_ID = PARENT_ORG_ID)
    AND NOT EXISTS
    (SELECT /*+INDEX(btpd1 BUS_TP_PORTFOLIO_DTLS_INDX02)*/
    btpd1.ba_prodtype_id
    FROM bus_tp_portfolio_details btpd1
    WHERE btpd1.org_id = 108503
    AND btpd1.booking_entity = 894
    AND BTPD.BA_PRODTYPE_ID = btpd1.ba_prodtype_id
    AND EXISTS
    (SELECT ba_prodtype_id
    FROM mst_cb_ba_product_type
    WHERE product_grp_id = 1
    AND btpd1.ba_prodtype_id = ba_prodtype_id))
    AND MCBPT.BA_PRODTYPE_ID = BTPD.BA_PRODTYPE_ID
    AND BTPD.CP_STATUS = 4
    AND LIM.OWNER_ID = BTPD.PORTFOLIO_ID
    AND LIM.OWNER_TYPE = 4
    AND LIM.LIMIT_TYPE_ID = 2) TEMP
    WHERE 1 = 1
    GROUP BY TEMP.BA_PRODTYPE_ID,
    TEMP.PERIOD_TYPE,
    TEMP.PERIOD_VALUE,
    TEMP.TENOR_IND,
    TEMP.SHORT_NAME,
    TEMP.CRP_PRODUCT_GROUP
    ORDER BY TEMP.BA_PRODTYPE_ID, TEMP.PERIOD_TYPE, TEMP.PERIOD_VALUE

  • Impact of solution of ORA-00979: not a GROUP BY expression in Oracle11g R2

    Hi,
    We have a query which is working in 10g and giving error "ORA-00979: not a GROUP BY expression" in Oracle11g R2 (11.2.0.3). we have found following two solution to resolve it from the internet.
    1)You can Set the hidden parameter “_FIX_CONTROL”=’5520732:OFF’ in the pfile. This parameter disables a given bug number.
    2)We can set the parameter optimizer_features_enable to a previous version of Oracle, ’11.1.0.7′
    but I am unable to find the side effects of above change, so I need to know:
    1)whcih is batter solution
    2)what are the possible side effects of both solution.

    Hi,
    1: The fix for the fix of bug 5520732 is already solved in 11.2, so this won't help
    2: This can cause performance, suboptimal plans and losing lot of features from 11.2
    The third option is always the best in this case, rewrite the query. There is an error in the SQL, so fix that one. It is just one query, so it wouldn't be to hard. The group by items are possibly out of sync with the select items.
    Herald ten Dam
    http://htendam.wordpress.com

  • Upgrade database ORA-00979: not a GROUP BY expression in Oracle11g R2

    hi,
    I am working in Oracle 10g (10.2.0.4) Environement. I want to update Our production database from Oracle 10g to Oracle11g R2(11.2.0.3).
    note: OS CentOS X86-64
    We follow the migration through import & Export Commands from Production database to New Database.
    One Of user having views, while executing that view in 11g R2 Environment it gives the following error.
    ORA-00979: not a GROUP BY expression.
    When i run this same Query in Oracle10g Environment is executed Successfully without errors or warnings.

    Please be aware that CentOS is not a supported distro for Oracle installs.
    For your error, pl see
    SQL used to work in 10G Throws ORA-00979 Not A Group By Expression after upgrading to 11G [ID 813946.1]     
    ORA-979 bugs on 11.2.0.1 [ID 1085766.1]
    ORA-00979 AFTER UPGRADE TO 11G [ID 814423.1]     
    HTH
    Srini

  • Getting "ORA-00979: not a GROUP BY expression" error in Inline query

    Hello all,
    The following query when run in SCOTT user gives "ORA-00979: not a GROUP BY expression" error.
    If I remove the TRUNC function from the outer query's group by clause, then it fetches
    (My actual query is something similar to the following query. I have given emp, dept tables for convenience's sake)
    select e.empno,e.ename, AVG(e.SAL), trunc(e.hiredate),
    (select sum(sal) from emp
    where hiredate = e.hiredate) salary
    from emp e
    group by e.DEPTNO,e.EMPNO,e.ENAME, trunc(e.hiredate)
    Pls suggest how this error can be avoided.
    Regards,
    Sam

    Why not this?
    satyaki>
    satyaki>select * from v$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for Linux: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
    Elapsed: 00:00:00.02
    satyaki>
    satyaki>
    satyaki>select e.empno,
      2         e.ename,
      3         AVG(e.SAL),
      4         trunc(e.hiredate),
      5        (
      6           select sum(sal)
      7           from emp
      8           where hiredate = e.hiredate
      9        ) salary
    10  from emp e
    11  group by e.DEPTNO,
    12           e.EMPNO,
    13           e.ENAME,
    14           e.hiredate;
         EMPNO ENAME      AVG(E.SAL) TRUNC(E.H     SALARY
          7934 MILLER         1887.6 23-JAN-82     5583.6
          7698 Glen             1848 23-JAN-82     5583.6
          7788 SCOTT          598.95 19-APR-87     598.95
          7900 JAMES          1379.4 03-DEC-81    6650.16
          7521 WARD           226.88 22-FEB-81     226.88
          7599 BILLY            4500 10-JUN-09       4500
          2222 sp               1200 14-SEP-09       1200
          7902 FORD          5270.76 03-DEC-81    6650.16
          7566 Smith            1848 23-JAN-82     5583.6
          7654 MARTIN           1815 28-SEP-81       1815
          7839 KING             7260 17-NOV-81       7260
         EMPNO ENAME      AVG(E.SAL) TRUNC(E.H     SALARY
          7844 TURNER           2178 08-SEP-81       2178
          7876 ADAMS          159.72 23-MAY-87     159.72
    13 rows selected.
    Elapsed: 00:00:00.03
    satyaki>Regards.
    Satyaki De.

  • ORA-00979: not a GROUP BY expression in Oracle11g R2

    hi,
    I am working in Oracle 9i Environement. I want to update Our production database from Oracle 9i to Oracle11g R2.
    Note :- Oracle 9i & 11g R2 are different systems.
    We follow the migration through import & Export Commands from Production database to New Database.
    One Of user having views, while executing that view in 11g R2 Environment it gives the following error.
    ORA-00979: not a GROUP BY expression.
    When i run this same Query in Oracle9i Environment is executed Successfully with out errors or warnings.
    This type of problem not occurred in all views.
    In Problematic view having Decode function with in that another decode method was used & finally group by clause is used.
    Please guide to me if any issues in 11g R2 Environment.
    Thanx in advance
    Vijay Kumar
    Edited by: user1672302 on Apr 4, 2012 5:32 PM

    Pl see these MOS Docs
    ORA-00979 AFTER UPGRADE TO 11G [ID 814423.1]     
    SQL used to work in 10G Throws ORA-00979 Not A Group By Expression after upgrading to 11G [ID 813946.1]     
    HTH
    Srini

  • "not a GROUP BY expression" error when using EclipseLink

    I'm using EcliseLink 2.3.0
    The follow SQL can be executed successfully.
    select to_char(o.taskDate, 'YYYY/MM'), sum(o.plannedHrs) from TaskItem o group by to_char(o.taskDate, 'YYYY/MM');
    But the JPQL has an error when it gets excuted.
    select FUNC('to_char', o.taskDate, 'YYYY/MM'), sum(o.plannedHrs) from TaskItem o group by FUNC('to_char', o.taskDate, 'YYYY/MM')
    ERROR LOG:
    Local Exception Stack:
    Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
    Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00979: not a GROUP BY expression
    Error Code: 979
    Call: SELECT to_char(TASK_DATE, ?), SUM(PLANNED_HRS) FROM ORA47111.S_PROJ_PLAN_ITEM GROUP BY to_char(TASK_DATE, ?)
         bind => [2 parameters bound]
    Query: ReportQuery(referenceClass=TaskItemDAO sql="SELECT to_char(TASK_DATE, ?), SUM(PLANNED_HRS) FROM ORA47111.S_PROJ_PLAN_ITEM GROUP BY to_char(TASK_DATE, ?)")
         at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
         at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644)
         at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535)
         at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1702)
         at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:566)
         at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)
         at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
         at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:264)
         at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:646)
         at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2592)
         at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllReportQueryRows(ExpressionQueryMechanism.java:2535)
         at org.eclipse.persistence.queries.ReportQuery.executeDatabaseQuery(ReportQuery.java:846)
         at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:829)
         at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1056)
         at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:390)
         at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1144)
         at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2863)
         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1501)
         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1483)
         at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1457)
         at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:485)
         at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:742)
         at projapis.projrollup.beans.ManagedTaskItemDAOBean.calcResourcePlannedHrsInMonth(ManagedTaskItemDAOBean.java:329)
         at projapis.projrollup.beans.ManagedTaskItemDAOBean.main(ManagedTaskItemDAOBean.java:522)
    Caused by: java.sql.SQLSyntaxErrorException: ORA-00979: not a GROUP BY expression
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
         at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
         at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
         at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
         at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
         at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
         at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863)
         at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)
         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275)
         at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
         at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620)
         at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
         at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:931)
         at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:607)
         ... 22 more
    Any suggestion?
    Thanks a lot.
    Edited by: sgao on Jul 19, 2011 11:13 PM

    Hello,
    Unfortunately it is the driver complaining about the SQL that is generated, but I see no major difference from the SQL in the exception:
    SELECT to_char(TASK_DATE, ?), SUM(PLANNED_HRS) FROM ORA47111.S_PROJ_PLAN_ITEM GROUP BY to_char(TASK_DATE, ?)
    and the SQL you state works other than it looks like JPQL not SQL: select to_char(o.taskDate, 'YYYY/MM'), sum(o.plannedHrs) from TaskItem o group by to_char(o.taskDate, 'YYYY/MM');
    Does it work if the SQL in the exception is executed as a native query? Since this the driver complaining about what looks correct, I would look at the driver/database versions to see if there is a later version that might have a bug that has been fixed.
    Best Regards,
    Chris

  • Ora-00979 not a group by expression

    hi , how r u ?
    my problem in group by , how include subquery in group by ,
    this query give me error ora-00979 not a group by expression ,
    please help me in this query :
    select EVV_CompScale.Code CompCode,ScaleCode ,NameEn,NameAr,RatingChar ,count(EV_CompetencyEmployee.Code) as VoteCount ,
    coalesce((select count(EV_CompetencyEmployee.code) from EV_CompetencyEmployee   join EV_EmployeeEvaluation tblEV on EV_Code=tblEV.Code  and EmployeeApprovalCMP=1 and DirectManagerApprovalCMP=1  and SeniorManagerApprovalCMP=1 and tblEV.configCode='K' where CompetencyCode=EVV_CompScale.Code  and not RatingID is null  ),1) as Total
    from EVV_CompScale left join (EV_CompetencyEmployee join EV_EmployeeEvaluation on EV_Code=EV_EmployeeEvaluation.Code and EmployeeApprovalCMP=1 and DirectManagerApprovalCMP=1 and SeniorManagerApprovalCMP=1 and EV_EmployeeEvaluation.configCode='K') on EV_CompetencyEmployee.CompetencyCode=EVV_CompScale.Code and RatingID=ScaleCode where CompConfig='K'
    and ScaleConfig='K' group by EVV_CompScale.Code,ScaleCode,RatingChar,NameEn,NameAr
    order by CompCode .
    thanks .

    Hi,
    In a GROUP BY querry, every item in the SELECT list must be one of the following
    (1) One of the GROUP BY expressions
    (2) An aggregate function
    (3) A constant
    (4) Deterministic expressions based on the above (for example, COALESCE, where all the arguments are taken from the list above)
    So if your scalar sub-query is going to be part of the GROUP BY query, it has to fit into one of those categories
    I don't see any good way of convincing the compiler that your scalar sub-query is a constant, even if it happens to rturn a constant value, but you can make it either
    (1) one of the GROUP BY expressions (compute it in a sub-query, to avoid repeating the whole scalar sub-query in the GROUP BY clause), or
    (2) an aggregate function ( e.g. MAX ((SELECT ...))).
    But the scalar sub-query doesn't have to be part of the GROUP BY query. Depending on your tables and the desired results, it might be easy to do the GROUP BY and what is now the scalar sub-query separately, and then join the two result sets.
    If you need help, it always helps to post:
    (1) The version of Oracle (and any other relevant software) you're using
    (2) A little sample data (just enough to show what the problem is) from all the relevant tables
    (3) The results you want from that data
    (4) Your best attempt so far (formatted) (You posted this, but since it's unformated, it's very hard to read.)
    (5) The full error message (if any), including line number
    Executable SQL statements (like "CREATE TABLE AS ..." or "INSERT ..." statements) are best for (2).
    Formatted tabular output is okay for (3). Type these 6 characters:
    {code}
    (small letters only, inside curly brackets) before and after formatted text, to preserve spacing.
    Simplify the problem if you can. For example, if your real query involves many columns and many join conditions, try to post a similar problem that has few columns and very siomple join conditions, but has the same problem as your real query.

  • Error : not a GROUP BY expression

    Hi everyone,
    Looks like i need some help here.. :) dont know what it means but im getting this message
    00979. 00000 - "not a GROUP BY expression"
    *Cause:   
    *Action:
    Error at Line: 137 Column: 36
    this is the function:
    function get_path(materialID in number, materialTypeID in number, inTopFolderID in number default null, inMaterialFolderID in number default null, webMode in number default 1)
    return varchar2;
    and im using it on my query
    ,(select material_util.get_path(m.material_id, 8, 1021695, min(mf.IP_MATERIALFOLDERID), 1)
    from material m, materialfolder mf
    where mf.nfx_link = m.MATERIAL_ID
    and m.template_id = t.template_id) as Path
    looks like min(mf.IP_MATERIALFOLDERID) is having some issues here.. dont know why..
    let me know guys..
    thanks..
    J

    A example
    with testdata as
    select 1 idu, 1 value1, 7 value2, 40 value3 from dual union all
    select 2 idu, 2 value1, 8 value2, 45 value3 from dual union all
    select 3 idu, 3 value1, 9 value2, 50 value3 from dual union all
    select 1 idu, 4 value1, 4 value2, 55 value3 from dual union all
    select 2 idu, 5 value1, 5 value2, 60 value3 from dual union all
    select 3 idu, 6 value1, 2 value2, 65 value3 from dual
    select min(value1), avg(value2), max(value1), sum(value3) from testdata;
    MIN(VALUE1) AVG(VALUE2) MAX(VALUE1) SUM(VALUE3)
    1 5,83333333333333333333333333333333333333 6 315
    Calculate the aggregated functions with all the data of the table.
    select idu, min(value1), avg(value2), max(value1), sum(value3) from testdata;
    Error SQL: ORA-00937:
    00937. 00000 - "not a single-group group function"
    Oracle don't know about what values have to calculate the aggrgates functions because there are not aggregated values in the select.
    select idu, min(value1), avg(value2), max(value1), sum(value3) from data group by idu;
    IDU MIN(VALUE1) AVG(VALUE2) MAX(VALUE1) SUM(VALUE3)
    1 1 5,5 4 95
    2 2 6,5 5 105
    3 3 5,5 6 115
    Calculate the aggregated functions in order at idu value.

  • Please help : not a group by expressions

    not a group by expressions,
    SELECT a.BATCH_ID, a.ASSOCIATE_NAME,count(a.ID)
    FROM ASSOCIATE1 a,SEMESTER1 s, BATCH1 b
    WHERE s.ID=b.SEMESTER_ID
    AND b.ID=a.BATCH_ID
    AND to_char(s.END_DATE,'DD-MON-YY')>'25-APR-13'
    AND to_char(s.END_DATE,'DD-MON-YY')<'25-MAY-13'
    GROUP BY a.BATCH_ID
    please help :( I get this error a lot of time, I dont know what I lack about the knowledge of group by function

    Hi,
    1001317 wrote:
    not a group by expressions,
    SELECT a.BATCH_ID, a.ASSOCIATE_NAME,count(a.ID)
    FROM ASSOCIATE1 a,SEMESTER1 s, BATCH1 b
    WHERE s.ID=b.SEMESTER_ID
    AND b.ID=a.BATCH_ID
    AND to_char(s.END_DATE,'DD-MON-YY')>'25-APR-13'
    AND to_char(s.END_DATE,'DD-MON-YY')<'25-MAY-13'
    GROUP BY a.BATCH_ID
    please help :( I get this error a lot of time, I dont know what I lack about the knowledge of group by functionHere are the ABC's of GROUP BY:
    When you use a GROUP BY clause and/or an aggregate function, then everything in the SELECT clause must be:
    (A) an <b>A</b>ggregate function,
    (B) one of the "group <b>B</b>y" expressions,
    (C) a <b>C</b>onstant, or
    (D) something that <b>D</b>epends entirely on the above. (For example, if you "GROUP BY TRUNC(dt)", you can SELECT "TO_CHAR (TRUNC(dt), 'Mon-DD')").
    In your case, the SELECT clause includes:
    COUNT (a.id)     which is an aggregate (A), so it's okay,
    a.batch_id     which is in the GROUP BY clause (B), so it's okay, and
    a.associate_name     which is none of the above.
    "GROUP BY a.batch_id" means the otput will contain 1 row for every distinct value of a.batch_id. What if there are several rows with the same value of a.batch_id: which of the several values of a.associate_name would you want to include? If your data is such that there can only be 1 distinct value of a.associate_name for each distinct value of a.batch_id, then it doesn't matter which of them is included (they are all the same), so you can use MIN (a.associate_name) or MAX (a.associate_name), or, even better, include a.associate_name in the GROUP BY clause.
    I hope this answers your question.
    If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all the tables involved, and the results you want from that data.
    Explain, using specific examples, how you get those results from that data.
    Always say what version of Oracle you're using (e.g. 11.2.0.2.0).
    See the forum FAQ {message:id=9360002}
    &nbps
    By the way:
    AND to_char(s.END_DATE,'DD-MON-YY')>'25-APR-13'
    AND to_char(s.END_DATE,'DD-MON-YY')<'25-MAY-13'I don't think you really mean what you said on the 2 lines above. You porbably meant
    {code
    AND s.END_DATE > TO_DATE ('25-APR-2013', 'DD-Mon-YYYY')
    AND s.END_DATE < TO_DATE ('25-MAY-2013', 'DD-Mon-YYYY')

  • ORA-00979: not a GROUP BY expression ORA-01722: invalid number error

    This is my follwing code:
    select isin,nomenclature,sum(total_balance),c_itd_rddt,c_itd_intrrt from
    select distinct instru.c_int_isin isin,
    instru.c_int_longdesc nomenclature,
    to_char(abs(acpos.acp_totbal),
    '999999999999,99,99,990.00')total_balance,
    c_itd_rddt,
    c_itd_intrrt
    from cs_instru_t instru,
    cs_instrudetls_t insdtls,
    cs_acpos_t acpos
    where instru.c_int_instruid = insdtls.c_itd_instruid
    and acpos.acp_instruid = instru.c_int_instruid
    and acpos.acp_acntnum = 'SG030001'
    and instru.c_int_instypid in (1)
    and insdtls.c_itd_rddt > ('31-Dec-2010')
    and instru.c_int_isin not in
    (select spsec.c_ssg_isinno from cs_splsecgrp_t spsec) and acpos.acp_totbal!=0
    group by instru.c_int_instruid,
    instru.c_int_longdesc,
    insdtls.c_itd_rddt,
    instru.c_int_insstts,
    instru.c_int_isin,
    insdtls.c_itd_rddt,
    acpos.acp_totbal,c_itd_intrrt
    --order by extract(year from  c_itd_rddt),c_itd_intrrt
    union
    select c_srm_prntisin isin,c_int_longdesc nomenclature,to_char(abs(acpos.acp_totbal),
    '999999999999,99,99,990.00') total_balance,c_itd_rddt,
    c_itd_intrrt from cs_instrudetls_t insdtls,cs_strmap_t map,cs_instru_strips instru,cs_acpos_t acpos
    where c_int_instruid=c_srm_prncplinsid
    and c_itd_instruid=c_int_instruid
    and c_srm_prncplinsid=acp_instruid
    and acp_acntnum='SG030001'
    )view1
    group by isin
    I want to group by isin only as only isin is same and the rest of the fields are different.But I want to display all the fields.Please Help
    I am getting the following errors:
    ORA-00979: not a GROUP BY expression
    ORA-01722: invalid number

    wat abt the other error ora-01722 not a valid number. How to take sum of total_balance which is to_char

  • Java.sql.SQLException: ORA-00979: not a GROUP BY expression in a query

    I am getting java.sql.SQLException: ORA-00979: not a GROUP BY expression
    when I run
    select count(*) from ( select count(rec_no) AS REC_NO_NUM,created_by AS
    CREATED_BY,to_char(created_dt,'Mon YYYY') AS CREATED_DT,to_date(to_char(created_dt,'Mon
    YYYY'),'Mon YYYY') AS CREATED_DATE from tbl_ndr_renal_reg where reg_no is not null and delete_ind
    = 'N' group by to_char(created_dt,'Mon YYYY'),created_by )
    But when I run the subquery below it doesn't give any error and returns rows.
    select count(rec_no) AS REC_NO_NUM,created_by AS CREATED_BY,to_char(created_dt,'Mon YYYY') AS
    CREATED_DT, to_date(to_char(created_dt,'Mon YYYY'),'Mon YYYY') AS CREATED_DATE from
    tbl_ndr_renal_reg where reg_no is not null and delete_ind = 'N' group by to_char(created_dt,'Mon
    YYYY'),created_by
    Thanks

    I tried that too still getting the same error
    SQL> select count(*) from (
    2 select count(rec_no) AS REC_NO_NUM,
    3 created_by AS CREATED_BY,
    4 to_char(created_dt,'Mon YYYY') AS CREATED_DT,
    5 to_date(to_char(created_dt,'Mon YYYY'),'Mon YYYY') AS CREATED_DATE
    6 from tbl_ndr_renal_reg
    7 where reg_no is not null
    8 and delete_ind = 'N'
    9 group by to_char(created_dt,'Mon YYYY'),created_by)
    10 ;
    to_date(to_char(created_dt,'Mon YYYY'),'Mon YYYY') AS CREATED_DATE
    ERROR at line 5:
    ORA-00979: not a GROUP BY expression

  • Note 830576 - Parameter recommendations for Oracle 10g

    hi all DBA experts.
    I am not good familiar with Oracle database while i read a Note 830576 - Parameter recommendations for Oracle 10g. in which SAP General Recommendation:
    You should delete obsolete initialization parameters from the profile.
    To determine which obsolete parameters are currently set, proceed as follows:
    SQL> SELECT NAME FROM V$OBSOLETE_PARAMETER WHERE ISSPECIFIED = 'TRUE';
    when i execute above command then result is no rows selected
    while there are many parameters in above SAP Note which are already obsolete and not set in initSID.ora file.
    for exp.  the parameter OPTIMIZER_INDEX_COST_ADJ  is showing
    #### OPTIMIZER MODE
    #optimizer_index_cost_adj = 10
    as you know that this parameter is very important regarding System Performance.
    now please guide me . I have to set these parameter or no need while there is not showing any parameters against obsolete command.
    waiting you valuable reply.
    Regards,

    hi both,
    thanks for knowledge sharing with me other SDN users,
    Dear Orkun,
    Ok. At this stage, I can recommend you that apply what they have suggested,
    in the message. So, you already did a part of it by configuring
    Oracle parameters, already.
    SAP support sent me this file (PRD_Parameters)
    *** INFORMATION  1 ***
    *** INFORMATION  2 ***
    *** INFORMATION  3 ***
    *** INFORMATION  4 ***
    *** INFORMATION  5 ***
    *** INFORMATION  6 ***
    *** INFORMATION  7 ***
    *** INFORMATION  8 ***
    *** INFORMATION  9 ***
    *** INFORMATION 10 ***
    *** INFORMATION 11 ***
    _b_tree_bitmap_plans
    _fix_control (4728348)
    event (10753)
    event (38087)
    event (10183)
    optimizer_index_cost_adj
    star_transformation_enabled
    event (10027)
    event (10028)
    event (10411)
    event (10629)
    event (14532)
    _fix_control (5705630)
    _fix_control (5765456)
    _optimizer_mjc_enabled
    _sort_elimination_cost_ratio
    event (10091)
    event (10142)
    event (38068)
    event (38085)
    event (44951)
    parallel_execution_message_size
    parallel_threads_per_cpu
    query_rewrite_enabled
    log_archive_dest_1
    log_archive_format
    max_dump_file_size
    optimizer_features_enable
    log_archive_dest
    _push_join_union_view
    _cursor_features_enabled
    _first_spare_parameter
    event (10049)
    db_writer_processes
    parallel_max_servers
    db_cache_size
    pga_aggregate_target
    processes
    sessions
    dml_locks
    job_queue_processes
    log_checkpoint_interval
    remote_login_passwordfile
    sga_max_size
    shared_pool_reserved_size
    sort_area_retained_size
    sort_area_size
    statistics_level
    workarea_size_policy
    they only highlighted these following parameters from above
    **** INFORMATION  8 ***     DB Patchset: 10.2.0.4.0
    **** INFORMATION  9 ***     DB Mergefix: 0 (released before 2008-07-11)
    FYI... recently, i applied the Oracle Patches 10.2.0.4 in this sequence
    MS Windows x86-64 (64-bit)
    Patchset_10204_MSWIN-x86-64aa.bin
    Patchset_10204_MSWIN-x86-64ab.bin
    Patchset_10204_MSWIN-x86-64ac.bin
    OPatch
    OPatch_10205_Generic_v0.zip
    Generic (32-bit / 64-bit)
    p8350262_10204_Generic.zip
    p7592030_10204_WIN_GENERIC.zip
    p9254968_10204_WIN_GENERIC.zip
    10204_Patch44_MSWIN-x86-64.zip
    p9584028_102040_Generic.zip
    p9843740_10204_Generic.zip
    and please tell me , still i have to apply highlighted parameters or now no need.
    Regards,

Maybe you are looking for

  • Unable to install SCCM roles - reporting not enough available disk space on to complete this operation

    Hi. I am having a strange problem with my SCCM 2012 R2 installation running on Windows Server 2008 R2. I am not able to add any new roles to the server.  Event log reports: "Product: Application Web Service -- There is not enough available disk space

  • Can an app receive SMS in some way?

    I'm sure this is stated in the guidelines, but Apple won't let me view those for some reason. I want to make an app that will read incoming SMS in some way, either by just receiving them or by reading notifications of incoming messages. Is that allow

  • NullPointerException with OracleConnectionCacheImpl

    I get the following exception from the OracleConnectionCacheImpl.getConnection() method when a number of threads are using the Cache: java.lang.NullPointerException at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java, Compiled Code) at ora

  • Photo Stream - How to know whats been uploaded?

    Hey Everyone, Now that the Camera Roll and Photo Stream has been removed from ios 8, how on earth am I meant to know which photos have been uploaded to iCloud or not? It was so simple before.. I hope they bring these back in the next update!

  • I can't flag emails in OS5. Only gives me the option to Unread.

    Still reading the OS5 manual. It says I can flag email, I read my work email off an Outlook enterprise server. The flag option doesn't appear when I mark in edit. I can unread it only. Is this a server issues? It's an iPhone 4.