none
Agrupar u Over con dos campos sql server RRS feed

  • Pregunta

  • Hola a todos buenas noches una manito por favor, tengo esta consulta en sql server cuando agrupo y solo por un campo funciona perfectamente. pero cuando agrego la fecha para que me agrupe por servicio y por mes ya no me sale el resultado

    esta es la consulta que tengo 

    select   DISTINCT MONTH(CAST(A.FechaMovimiento AS date)), sum(A.MontoIngreso) 
    from  tblMovimientosContables A 
    JOIN tblServicios b 
    on a.Movimiento_Id = b.Id
    where MontoIngreso > 0
    group by   A.FechaMovimiento

    por ejemplo mi resultado que deseo obtener esl

    ventas  | 6  | 10.000

    ventas  | 7  | 5.000

    6 es Junio y 7 Julio

    por favor me pueden ayudar 

    Les agradezco.

    RM

    jueves, 16 de julio de 2020 1:04

Respuestas

  • Si agrupas por A.FechaMovimiento te sale un grupo por cada fecha, no por el mes de la fecha, que aparentemente es lo que deseas. Para que te agrupe por mes tienes que usar

    group by MONTH(CAST(A.FechaMovimiento AS date))

    y deberías quitar el DISTINCT, que no tiene ningún sentido para una consulta de este tipo. Si te salen registros repetidos, quiere decir que algo estás haciendo mal en la selección o la agrupación. Lo que hay que hacer es identificar qué es lo que falla y corregirlo, no intentarlo "arreglar" con un DISTINCT.

    jueves, 16 de julio de 2020 7:26

Todas las respuestas

  • Si agrupas por A.FechaMovimiento te sale un grupo por cada fecha, no por el mes de la fecha, que aparentemente es lo que deseas. Para que te agrupe por mes tienes que usar

    group by MONTH(CAST(A.FechaMovimiento AS date))

    y deberías quitar el DISTINCT, que no tiene ningún sentido para una consulta de este tipo. Si te salen registros repetidos, quiere decir que algo estás haciendo mal en la selección o la agrupación. Lo que hay que hacer es identificar qué es lo que falla y corregirlo, no intentarlo "arreglar" con un DISTINCT.

    jueves, 16 de julio de 2020 7:26
  • select MONTH(CAST(A.FechaMovimiento AS date)) Mes ,b.NombreServicio,sum(A.MontoIngreso) Monto from tblMovimientosContables A JOIN tblServicios b on a.Movimiento_Id = b.Id where MontoIngreso > 0 group by MONTH(CAST(A.FechaMovimiento AS date)),b.NombreServicio

    --- Muchas gracias Alberto Poblacion,

    RM

    jueves, 16 de julio de 2020 12:16