Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

agrupar por rango de fechas

Estas en el tema de agrupar por rango de fechas en el foro de SQL Server en Foros del Web. buenas, ojala alguien me pueda dar una mano.... Les cuento. Tengo una base donde tengo los siguientes campos... Id_cod, descrip,fecha,Vta_b,Vta_n,dto,canti por cada producto vendido se ...
  #1 (permalink)  
Antiguo 10/05/2011, 16:49
 
Fecha de Ingreso: mayo-2011
Mensajes: 1
Antigüedad: 12 años, 11 meses
Puntos: 0
Pregunta agrupar por rango de fechas

buenas, ojala alguien me pueda dar una mano....
Les cuento.
Tengo una base donde tengo los siguientes campos...
Id_cod, descrip,fecha,Vta_b,Vta_n,dto,canti

por cada producto vendido se genera un registro, por eso puedo tener un mismo producto repetido varias veces.
Lo que necesito es poder agrupar por rango de fechas los productos

Un ejemplo
id_cod Fecha Descrip Vta_b Vta_n dto canti
1 20/04/2011 Lapiz azul 10.00 10.00 0.00 1
2 02/05/2011 Lapiz negro 5.00 5.00 0.00 2
3 03/05/2011 Lapiz azul 10.00 8.00 2.00 1
4 05/05/2011 Lapiz negro 10.00 9.00 1.00 2

necesitaria tener....
abril lapiz negro 10.00 10.00 0.00 1
mayo lapiz azul 10.00 8.00 2.00 2
mayo lapiz negro 15.00 14.00 1.00 4

como podria hacerlo? lo que mas me interesa es poder agrupar el rango de fechas que no tengo idea

muchisimas gracias
  #2 (permalink)  
Antiguo 11/05/2011, 01:31
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: agrupar por rango de fechas

Con un CASE creas una columna nueva que dependa de la fecha y agrupas por esa columna
  #3 (permalink)  
Antiguo 11/05/2011, 07:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: agrupar por rango de fechas

Prueba con algo asi :)

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. id_cod INT,
  4. fecha datetime,
  5. decript VARCHAR(100),
  6. vta_b INT,
  7. vta_n INT,
  8. dto INT,
  9. canti INT
  10. )
  11.  
  12.  
  13. INSERT INTO #temp(id_cod,Fecha,decript,Vta_b,Vta_n,dto,canti) VALUES (1,'04/20/2011','Lapiz azul',10.00,10.00,0.00,1)
  14. INSERT INTO #temp(id_cod,Fecha,decript,Vta_b,Vta_n,dto,canti) VALUES (2,'05/20/2011','Lapiz negro',5.00,5.00,0.00,2)
  15. INSERT INTO #temp(id_cod,Fecha,decript,Vta_b,Vta_n,dto,canti) VALUES (3,'05/03/2011','Lapiz azul',10.00,8.00,2.00,1)
  16. INSERT INTO #temp(id_cod,Fecha,decript,Vta_b,Vta_n,dto,canti) VALUES (4,'05/05/2011','Lapiz negro',10.00,8.00,1.00,2)
  17.  
  18. SELECT mes,decript,SUM(Vta_b) AS vta_b, SUM(Vta_n) AS vta_n,SUM(dto) AS dto, SUM(canti) AS canti  FROM(
  19. SELECT datename(mm,fecha) AS mes,* FROM #temp) t1 GROUP BY mes,decript


Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 11/05/2011, 10:18
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: agrupar por rango de fechas

Hola cbyto:

Humildemente creo que los compañeros Heimish2000 y Libras están complicando demasiado las alternativas que proponen, pues creo que no hay necesidad ni de crear una columna adicional con CASE como propone Heimish2000, ni tampoco hay necesidad de hacer una subconsulta, como lo propone Libra. Creo que puedes obtener el resultado esperado de manera directa, prueba con esto:

Código SQL:
Ver original
  1. SET LANGUAGE spanish
  2. DECLARE @Tabla TABLE (id_cod INT, Fecha datetime, Descrip VARCHAR(50), Vta_b FLOAT, Vta_n FLOAT, dto FLOAT, canti INT)
  3. INSERT INTO @Tabla VALUES (1, '20/04/2011', 'Lapiz azul', 10.00,10.00, 0.00, 1)
  4. INSERT INTO @Tabla VALUES (2, '02/05/2011', 'Lapiz negro', 5.00, 5.00, 0.00, 2)
  5. INSERT INTO @Tabla VALUES (3, '03/05/2011', 'Lapiz azul', 10.00, 8.00, 2.00, 1)
  6. INSERT INTO @Tabla VALUES (4, '05/05/2011', 'Lapiz negro',10.00, 9.00, 1.00, 2)
  7.  
  8. SELECT datename(m, Fecha), descrip,
  9. SUM(Vta_b) Total_Vta_b, SUM(Vta_n) Total_Vta_n, SUM(dto) Total_dto,  SUM(canti) total_canti
  10. FROM @Tabla
  11. GROUP BY datename(m, Fecha), descrip

esta línea

Código:
set language spanish
sirve para poner por defecto los nombres de los meses en español y te permite capturar las fechas en formato dd/mm/yyyy.

Haz la prueba y nos comentas los resultados.

Saludos
Leo.

Etiquetas: agrupar, fechas, rango
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:35.