Subject Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Author

The following query:


SELECT PB_LOAD_TYPE,

       /* If already picked up use the pick up date.

          If already delivered us the delivered date.

          If appointment date present, use it.

          Otherwise, use today's date */

       IIF(OPS_ONBOARD_TIME IS NOT NULL,

           CAST(OPS_ONBOARD_TIME AS DATE),

           IIF(OPS_DELIVERED_TIME IS NOT NULL,

               CAST(OPS_DELIVERED_TIME AS DATE),

               COALESCE(CAST(OPS_APPT_LOW AS DATE), CAST('TODAY' AS DATE)))) AS APPT_DATE,

       /* Get the region ID */

       COALESCE((SELECT FIRST 1 CTRR_REGION_ID

                   FROM CT_REGION_RANGES

                   WHERE CTRR_LOW_ZIP <= OPS_ZIP AND

                         CTRR_HIGH_ZIP >= OPS_ZIP

                   ORDER BY CTRR_REGION_ID), 'N/A') AS REGION_ID,

       /* Count pick ups */

       SUM(IIF(OPS_TYPE = 'P', 1, 0)) AS PICKUPS,

       /* Count deliveries */

       SUM(IIF(OPS_TYPE = 'P', 0, 1)) AS DELIVERIES

  FROM OPS_STOP_REC

    LEFT JOIN OPS_HEADER ON PB_ID = OPS_ORDER_ID

  WHERE PB_TYPE = 'O' AND

        PB_DT_ENT >= :PB_DT_ENT

  GROUP BY APPT_DATE, PB_LOAD_TYPE, REGION_ID

  ORDER BY APPT_DATE, PB_LOAD_TYPE, REGION_ID


throws this error:

Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)


There is nothing wrong with the query that I can see. What am I missing?


If I remove the two SUM() lines and the GROUP BY it works perfectly.


I am using Firebird 2.5 32-bit on Windows 7 64-bit.