Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-08-2012
Jean Pierre Jean Pierre is offline
Registrado
NULL
 
Registrado: jul 2012
Posts: 8
Poder: 0
Jean Pierre Va por buen camino
Smile ¿Cómo aplicar un filtro por fecha a un campo calculado dentro de una consulta?

Saludos amigos foreros, estoy elaborando un reporte con el ReportBuilder de Digital Metaphors al cual le agregue varias consultas de la Base de Datos con el objetivo de obtener los datos y calculos que son necesarios para el reporte en cuestión, una de las consulta (Ver enlace "Imagen Consulta_B") incluye un campo calculado como les muestro a continuación:

Código SQL [-]
SELECT   CodProd, AVG(CntVentas)AS Promedio
FROM   SAEPRD
GROUP BY CodProd
ORDER BY CodProd DESC

La tabla a la que esta asociada dicha consulta incluye una columna denominada "Periodo" del tipo fecha con formato YYYYMM la cual deseo utilizar para filtrar mi consulta, el problema se presenta debido a que el dato "Periodo" se repite por cada producto que este registrado debido a que la tabla a la que esta asociada es una tabla de estadisticas de inventario (Ver enlace "Imagen Tabla SAEPRD"). Mi objetivo es obtener el promedio de ventas mensual de un producto tomando como base para el calculo la sumatoria de las ventas ( AVG(CntVentas) ) de los ultimos 12 meses (Tabla SAEPRD.Periodo), ya tengo la sumatoria pero no conozco la forma de filtrar la consulta con los ultimos 12 meses, esto ultimo es importante ya que al generar el reporte la consulta debe tomar como ultima fecha la del momento en que se esta generando el reporte y tomar en cuenta los 12 meses anteriores para ejecutar el calculo respectivo.

Trate de explicar mi caso de la mejor manera, si necesitan información adicional para solventar mi duda con gusto se las expondre.

Imagen Consulta_B: https://dl.dropbox.com/u/93589263/Consulta_B.jpg
Imagen Tabla SAEPRD: https://dl.dropbox.com/u/93589263/Tabla%20SAEPRD.jpg
Imagen Reporte: https://dl.dropbox.com/u/93589263/Reporte.jpg

De antemano muchas gracias por la ayuda que puedan brindarme.

Responder Con Cita
  #2  
Antiguo 02-08-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
No mencionas que motor usas. Pero por lo regular en un "where" que seria el filtro, no se pueden utilizar funciones, cuando es el caso como me parece que es el tuyo utilizamos la clausula "HAVING" para filtrar los grupos creo que pudiera ser así:

Código SQL [-]
SELECT   CodProd, AVG(CntVentas)AS Promedio
FROM   SAEPRD
GROUP BY CodProd HAVING AVG(CntVentas)="aqui pones tu condicion"
ORDER BY CodProd DESC

Lo escribo de botepronto aclaro.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #3  
Antiguo 02-08-2012
Jean Pierre Jean Pierre is offline
Registrado
NULL
 
Registrado: jul 2012
Posts: 8
Poder: 0
Jean Pierre Va por buen camino
Smile

Cita:
Empezado por AzidRain Ver Mensaje
No mencionas que motor usas. Pero por lo regular en un "where" que seria el filtro, no se pueden utilizar funciones, cuando es el caso como me parece que es el tuyo utilizamos la clausula "HAVING" para filtrar los grupos creo que pudiera ser así:

Código SQL [-]
SELECT   CodProd, AVG(CntVentas)AS Promedio
FROM   SAEPRD
GROUP BY CodProd HAVING AVG(CntVentas)="aqui pones tu condicion"
ORDER BY CodProd DESC

Lo escribo de botepronto aclaro.
Saludos AzidRain, ante todo te agradezco mucho tu aporte y tu interés por mi interrogante, te comento que intente la solución que me planteaste pero no logre que funcionara, esto debido a que la variable que necesito usar como filtro no se encuentra dentro de la selección del comando SELECT, adicional a esto es importante resaltar que la condición debe estar ligada con la fecha en que se genera el reporte ya que necesito que tome como base para el calculo los últimos 12 meses para así obtener un valor mas fiable de la rotación mensual del inventario.

El motor de Base de Datos que utiliza mi sistema es el MS SQL Server Enterprise 2008.

De nuevo muchas gracias por tu ayuda.

Última edición por Jean Pierre fecha: 02-08-2012 a las 05:05:16. Razón: Agregar información
Responder Con Cita
  #4  
Antiguo 02-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo que dificulta tu consulta es el hecho de que el campo periodo no es un campo tipo fecha. Pero pienso que podrías hacer un CAST, agregando el dia 1 de cada mes, para obtener una fecha completa. Claro que posiblemnte tendrás que separar año y mes del periodo y luego concatenar con el dia primero. Una vez que tengas la fecha puedes usar una función para sumar o restar de una fecha. En SQL Server parece que esa función es DateAdd.

Por ejemplo, si el campo periodo fuera de tipo Date, entonces tu filtro sería:

Código SQL [-]
where periodo between GetDate() and DateAdd(year, -1, GetDate())

es decir, que el periodo esté entre la fecha actual (GetDate) y la fecha actual menos un año.

// Saludos
Responder Con Cita
  #5  
Antiguo 28-08-2012
Jean Pierre Jean Pierre is offline
Registrado
NULL
 
Registrado: jul 2012
Posts: 8
Poder: 0
Jean Pierre Va por buen camino
Smile Solucionado Creando Vista en SQL

Saludos amigos foreros, ante todo les remito mi agradecimiento por sus valiosos comentarios de ayuda y asesoramiento, les comento que logre hacer mi reporte con los útiles consejos que me dieron y leyendo un poco sobre SQL Server y Transact-SQL, luego de muchas pruebas y de mucha meditación decidi crear una vista en SQL para luego consultarla en el ReportBuilder, ya que, si generaba las consultas con los calculos requeridos el reporte demoraba toda una eternidad en crearse; el script para la consulta quedo de la siguiente manera:

Código SQL [-]
SELECT     TOP (100) PERCENT coditem, SUM(Cantidad) AS TOTALVTA
FROM         dbo.VW_ADM_ITEMSFACTURA
WHERE     (FechaEF BETWEEN DATEADD(year, - 1, GETDATE()) AND GETDATE())
GROUP BY coditem, TipoFac
HAVING      (TipoFac = 'A')
ORDER BY coditem

Como pueden ver con la consulta anterior obtuve el acumulado de venta por producto del ultimo año y luego en el ReportBuilder cree una variable calculada para promediar las ventas. Actualmente el reporte esta en periodo de prueba y le estamos haciendo algunos chequeos para verificar que la informacion plasmada en el mismo sea fidedigna pero gracias a ustedes hemos logrado un gran avance.

Muchisimas gracias . . .
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
campo calculado en consulta y variable david_uh Varios 2 27-11-2008 01:51:51
Se puede hacer una consulta a un campo calculado? flystar SQL 4 11-10-2007 11:11:10
Promedio de campo calculado con una sub-consulta ContraVeneno SQL 8 06-10-2005 16:38:06
consulta por campo calculado noe SQL 15 28-06-2005 15:44:54
¿Cómo podemos dejar de aplicar un filtro? vhirginia Conexión con bases de datos 3 27-04-2004 17:34:24


La franja horaria es GMT +2. Ahora son las 07:37:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi