SQL - Suma entre años y meses

 
Vista:

Suma entre años y meses

Publicado por ROBERTO (4 intervenciones) el 01/08/2016 11:11:31
Hola. Tengo una tabla donde se guardan registros del tipo CODART,AÑO,MES,UNIDADES. Estoy intentando hacer una suma de ventas de los ultimos 12 meses desde el mes del sistema en el que realizo la consulta.

Ejemplo. Si lo haría hoy mismo tendría sumar todas las unidades vendidas entre agosto del 2015 y agosto del 2016.

El campo AÑO guarda registros del tipo 2010,2011,2012 .......
El campo Mes guarda registros del 1 al 12
CABART = CODIGO DEL ARTICULO
CABUNI = UNIDADES

La query que yo he hecho es esta:

SELECT CABART,Sum(CABUNI)
FROM PGMODUBI.CABREP
WHERE CABANY = '2015' AND CABMES >= '8' AND CABANY = '2016' AND CABMES <= '8' AND CABART = '15326'
GROUP BY CABART,CABANY,CABMES
ORDER BY CABART ASC

Esta consulta de momento me devuelve 0 cuando he confirmado que debería darme una suma de 138 unidades.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Suma entre años y meses

Publicado por leonardo_josue (1173 intervenciones) el 01/08/2016 16:04:50
Hola Roberto:

Tienes varios detalles en tu consulta:

1. De qué tipo son tus campos AÑO y MES... puedo suponer que se trata de campos tipo numérico (sería un terrible error de diseño el que hubieras trabajado estos campos como tipo caracter, ya que no es lo mismo 1 que '1'). En otras palabras, si tus campos son de tipo numérico entonces NO PONGAS EN LA CONDICIÓN LOS VALORES ENTRE COMILLAS, ya que las cadenas tienen un tipo de comportamiento distinto cuando los utilizas en condiciones tipo > o <.

2. La consulta te devuelve un cero porque tienes mal planteada la consulta... Observa esto que pones:

1
CABANY = '2015' AND CABANY = '2016'

Tal como está planteado, estás diciendo que el Año sea 2015 Y 2016 a la vez... sería como querer encontrar un número par pero que no sea divisible entre 2 O_o

Lo que tienes que hacer es utilizar el operador O (OR) en lugar de utilizar solo operadores Y (AND):

1
(CABANY = 2015 AND CABMES >= 8) OR (CABANY = 2016 AND CABMES <= 8)

Debes tener mucho cuidado cuando en una misma sentencia mezcles operadores tipo AND y OR, ya que estos no tienen la misma jerarquía de ejecución, es como en matemáticas, no es lo mismo

1
2
3
4
5
2+3*4 = 14
 
a
 
(2+3)*4 = 20

haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma entre años y meses

Publicado por ROBERTO (4 intervenciones) el 02/08/2016 14:20:41
Perfecto muchas gracias . Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar