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

Agrupación por dia, mes o año

Estas en el tema de Agrupación por dia, mes o año en el foro de SQL Server en Foros del Web. Buenos días a todos. A ver si puedo explicarme claramente y alguien puede ayudarme. Tengo 2 tablas, una tabla "movimientos almacén" y otra "movimientos almacén ...
  #1 (permalink)  
Antiguo 03/12/2014, 07:29
 
Fecha de Ingreso: abril-2010
Mensajes: 7
Antigüedad: 14 años
Puntos: 0
Pregunta Agrupación por dia, mes o año

Buenos días a todos.
A ver si puedo explicarme claramente y alguien puede ayudarme.

Tengo 2 tablas, una tabla "movimientos almacén" y otra "movimientos almacén temp" y quiero insertar registros agrupados de la tabla "movimientos almacen" a la temporal.
Es decir:
Código SQL:
Ver original
  1. INSERT INTO "movimientos almacen"
  2. SELECT .... FROM "movimientos almacen temp"

Lo que quiero hacer es agrupar los registros de la tabla "movimientos almacén" por "fecha registro", pasandole un parámetro para indicar si agrupar por día, mes o año.
La agrupación la realizo correctamente.
Código SQL:
Ver original
  1. SELECT CASE @filtro
  2.             WHEN 1 THEN DATEPART(DAY,"Registering Date")
  3.             WHEN 2 THEN DATEPART(MONTH,"Registering Date")
  4.             WHEN 3 THEN DATEPART(YEAR,"Registering Date")
  5.         END AS fecha,
  6.         "Location Code", "Zone Code", "Bin Code", "Item No_", SUM("Quantity"),
  7.         SUM("Qty_ (Base)")
  8.     FROM dbo.[CRONUS España S_A_$Warehouse Entry]
  9.     WHERE "Registering Date" BETWEEN '2007-01-01' AND '2008-12-31'
  10.     GROUP BY CASE @filtro
  11.             WHEN 1 THEN DATEPART(DAY,"Registering Date")
  12.             WHEN 2 THEN DATEPART(MONTH,"Registering Date")
  13.             WHEN 3 THEN DATEPART(YEAR,"Registering Date")
  14.         END,
  15.         CASE @filtro
  16.             WHEN 1 THEN DATEPART(MONTH,"Registering Date")
  17.             WHEN 2 THEN DATEPART(YEAR,"Registering Date")
  18.         END,
  19.         CASE @filtro
  20.             WHEN 1 THEN DATEPART(YEAR,"Registering Date")
  21.         END, "Item No_", "Location Code", "Zone Code", "Bin Code"

El problema esta en que esta consulta me devuelve como "Fecha registros" un entero, y a mi me gustaría que me devolviera si es un día pues la fecha completa, si es un mes pues 31/mes/año, y si es un año 31/12/año.

He probado a castear a datetime, pero entonces en el group by también debo hacerlo y ya pierdo la agrupación.

A ver si alguien puede echarme un mano.

Un saludo y gracias de antemano.
  #2 (permalink)  
Antiguo 03/12/2014, 09:42
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: Agrupación por dia, mes o año

pues realiza un subquery:

Código SQL:
Ver original
  1. SELECT CONVERT(fecha,datetime) AS fecha, t1.* FROM(
  2. SELECT CASE @filtro
  3.             WHEN 1 THEN DATEPART(DAY,"Registering Date")
  4.             WHEN 2 THEN DATEPART(MONTH,"Registering Date")
  5.             WHEN 3 THEN DATEPART(YEAR,"Registering Date")
  6.         END AS fecha,
  7.         "Location Code", "Zone Code", "Bin Code", "Item No_", SUM("Quantity"),
  8.         SUM("Qty_ (Base)")
  9.     FROM dbo.[CRONUS España S_A_$Warehouse Entry]
  10.     WHERE "Registering Date" BETWEEN '2007-01-01' AND '2008-12-31'
  11.     GROUP BY CASE @filtro
  12.             WHEN 1 THEN DATEPART(DAY,"Registering Date")
  13.             WHEN 2 THEN DATEPART(MONTH,"Registering Date")
  14.             WHEN 3 THEN DATEPART(YEAR,"Registering Date")
  15.         END,
  16.         CASE @filtro
  17.             WHEN 1 THEN DATEPART(MONTH,"Registering Date")
  18.             WHEN 2 THEN DATEPART(YEAR,"Registering Date")
  19.         END,
  20.         CASE @filtro
  21.             WHEN 1 THEN DATEPART(YEAR,"Registering Date")
  22.         END, "Item No_", "Location Code", "Zone Code", "Bin Code"
  23. ) AS t1
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 03/12/2014, 11:00
 
Fecha de Ingreso: abril-2010
Mensajes: 7
Antigüedad: 14 años
Puntos: 0
Respuesta: Agrupación por dia, mes o año

Si pero en este caso estoy en las mismas...
Me devuelve solo el día, mes o año, y la columna fecha no corresponde, mete el año 1900..
  #4 (permalink)  
Antiguo 03/12/2014, 11:05
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: Agrupación por dia, mes o año

pues no hace magia el query, hace lo que pedias, ahora del formato de fecha, si es un dia, a que mes corresponde? si es un mes a que año?? con los datos que tienes no se puede sacar una fecha concreta a menos que tengas fechas definidas....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 03/12/2014, 11:58
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Agrupación por dia, mes o año

Si mete el año 1900, es porque no tienes una dato de fecha en ese campo, o sea, estaba vacio y como default, SQL Server pone una fecha con año 1900
__________________
MCTS Isaias Islas

Etiquetas: año, dia, group, registros, select, tabla
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 00:02.