none
Column is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause RRS feed

  • Pregunta

  • SELECT 
    TOP 10
    T0.ItemCode,
    T1.DocDate,
    T1.DocEntry,
    T0.ItemName,
    T0.NumInBuy AS 'Artículos por unidad de compras',
    T0.SalUnitMsr AS 'Nombre de unidad de ventas',
    T0.U_iva AS 'IVA',
    T0.BuyUnitMsr AS 'Unidad de medida de compras',
    T0.U_UCP AS 'Unidad de medida numero',
    T0.[U_IEPSBEB], 
    T0.[U_HISTORICO]

    FROM
    OITM T0 LEFT JOIN 
    INV1 T1 ON T1.ItemCode = T0.ItemCode
    WHERE 
    (T0.ItemCode LIKE 'SE%'
    OR
    T0.ItemCode LIKE 'RE%'
    OR
    T0.ItemCode LIKE 'CO%'
    OR
    T0.ItemCode LIKE 'OT%'
    AND
    T0.[OnHand] > 0
    AND
    T0.[frozenFor] = 'N'
    AND 
    T1.DocDate BETWEEN '[%0]' AND '[%1]')

    GROUP BY T1.ItemCode
    ORDER BY T1.DOCDATE

    I need help with the GOUP BY.

    I don't understand why the query throws that error.

    1). [Microsoft][SQL Server Native Client 10.0][SQL Server]Column 'OITM.ItemCode' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 2). [Microsoft][SQL Server Native Client 10.0][SQL Server]Statement '' (SWEI) (s) could not be prepared.

    viernes, 2 de septiembre de 2016 18:45

Respuestas

  • Sabemos que deseas agrupar pero no sabemos las columnas que marcan o identifican el grupo.

    Dicho lo anterior, las columnas que no forman parte del grupo (recuerda que agrupas un # dado de filas) entonces deberan formar parte de alguna funcion de agregacion que es lo que normalmente hacemos cuando agrupamos. Claro esta que esto es para las clausulas procesadas logicamente despues de GROUP BY que son HAVING / SELECT / ORDER BY.

    Ejemplo: Suponiendo que tenemos una tabla de ventas donde se almacenan entre otras las columnas vendedor_id, cliente_id, articulo_id, cantidad, precio_venta, fecha_venta, deseamos saber la cantidad en moneda vendida por dia por cada vendedor en el anio 2016.

    select vendedor_id, fecha_venta, sum(cantidad * precio_venta) as total venta
    from T
    where fecha_venta >= '20160101' and fecha_venta < '20170101'
    group by vendedor_id, fecha_venta;

    Como vez, el grupo esta dado por fecha y vendedor, asi que las columnas [cantidad] y [precio_venta] forman parte de una funcion de agregacion.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    viernes, 2 de septiembre de 2016 18:58

Todas las respuestas

  • Sabemos que deseas agrupar pero no sabemos las columnas que marcan o identifican el grupo.

    Dicho lo anterior, las columnas que no forman parte del grupo (recuerda que agrupas un # dado de filas) entonces deberan formar parte de alguna funcion de agregacion que es lo que normalmente hacemos cuando agrupamos. Claro esta que esto es para las clausulas procesadas logicamente despues de GROUP BY que son HAVING / SELECT / ORDER BY.

    Ejemplo: Suponiendo que tenemos una tabla de ventas donde se almacenan entre otras las columnas vendedor_id, cliente_id, articulo_id, cantidad, precio_venta, fecha_venta, deseamos saber la cantidad en moneda vendida por dia por cada vendedor en el anio 2016.

    select vendedor_id, fecha_venta, sum(cantidad * precio_venta) as total venta
    from T
    where fecha_venta >= '20160101' and fecha_venta < '20170101'
    group by vendedor_id, fecha_venta;

    Como vez, el grupo esta dado por fecha y vendedor, asi que las columnas [cantidad] y [precio_venta] forman parte de una funcion de agregacion.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    viernes, 2 de septiembre de 2016 18:58
  • Ok, si entiendo pero entonces si quiero mostrar mas datos en mi consulta, ¿Tienen que ser parte de una función de agregación para que pueda funcionar mi GROUP BY?

    Gracias por responder..

    viernes, 2 de septiembre de 2016 19:08