Filtro imposible en una Query

Bueno sigo luchando con esta base y tengo un problema que se esta tornando imposible resolver:
Aquí pongo una dir para que vean una captura de la vista diseño para que sea más fácil de entenderme
http://picasaweb.google.com/piachens/Access/photo#5232122021774038754
Bueno la cuestión es la siguiente
Lo que quiero hacer es cuando ejecuto la query debo ingresar ciertos datos para filtrar. Como por ejemplo si es cartera actual que como es un check el usuario ingesa 0 o -1. Fecha de vigencia de proyecto, tanto desde como hasta y acá es donde esta el problema por que tiene que ingresar el año a sumarizar presupuesto y gastos.
por ejemplo usuario ingresa 0 despues fecha desde 01/01/2000 hasta 31/12/2008 y año 2008
El problema es que la información de presupuesto y gastos la obtiene de otra query, la 1007 y no se como hacer un filtro por columna.
Lo que me gustaría saber es si es posible que cuando ponga por ejemplo 2007 solo inserte en la query la columna presupuesto y gasto 2007 de la query 1007.
Para que se entienda si tenemos una tabla que tiene filas y columnas, yo se como hacer filtros sobre las filas pero no sobre las columnas.
¿Se entiende? Puedo poner más imágenes o explicarme un poco mejor.

1 Respuesta

Respuesta
1
Esta consulta toma unos u otros campos para según el valor de otro anterior:
SELECT Year([¿Fecha? (dd/mm/aaaa)]) AS DisFecha, IIf([disfecha]=2006,[SumaDe2006-Gasto],IIf([disfecha]=2007,[SumaDe2007-Gasto],IIf([disfecha]=2008,[SumaDe2008-Gasto],0))) AS Gasto, IIf([disfecha]=2006,[SumaDe2006-Gasto],IIf([disfecha]=2007,[SumaDe2006-Gasto]+[SumaDe2007-Gasto],IIf([disfecha]=2008,[SumaDe2006-Gasto]+[SumaDe2007-Gasto]+[SumaDe2008-Gasto],0))) AS GastoAcumulado
FROM 1007_REPORTE_PRESUP;
He intentado hacerla desde tu tabla 1007,
hace lo siguiente:
Pide una fecha para tomar el año, y según este año muestra el gasto del 2006, del 2007 o del 2008 para el gasto, o suma el gasto de unos años según el año de la fecha.
Dytcdo, muchas gracias! Creo que diste en el clavo, pero no se como implementar tu solución.
Lo que hice fue crear una nueva consulta y en la vista sql pegue lo que pusiste, pero cuando la ejecuto me aparece el error la función [SiInm] no esta definida en la expresión.
EL código sql original de la imagen anterior es el sig.

PARAMETERS [Es cartera?] Bit;
SELECT PR_Proyecto.Id, PR_Proyecto.cd_proyecto, PR_Proyecto.nm_proyecto, ZPruebaZ.[Es cartera Actual?], ZPruebaZ.[Vigencia Desde], ZPruebaZ.[Vigencia Hasta], ZPruebaZ.[Palanca Principal], ZPruebaZ.[Palanca Principal], ZPruebaZ.[Objetivo Principal], AR_Area.Id_Area_Padre, PR_Proyecto.Id_Area_Pertenece, [tmp - madurez planificacion].Nombre, [tmp - madurez planificacion].[Líder/es], [tmp - madurez planificacion].Estado, [tmp - madurez planificacion].[Madurez Planificación], PR_Proyecto.[Vigencia Desde], PR_Proyecto.[Vigencia Hasta], TABLA_PALANCAS.Palanca, TABLA_PALANCAS.Objetivo, [1007_REPORTE_PRESUP].[SumaDe2006-Gasto], [1007_REPORTE_PRESUP].[SumaDe2007- Presupuesto Actualizado], [1007_REPORTE_PRESUP].[SumaDe2007-Gasto], [1007_REPORTE_PRESUP].[SumaDe2008- Presupuesto Actualizado], [1007_REPORTE_PRESUP].[SumaDe2008-Gasto]
FROM (AR_Area INNER JOIN (((PR_Proyecto INNER JOIN ZPruebaZ ON PR_Proyecto.Id = ZPruebaZ.Id) INNER JOIN [tmp - madurez planificacion] ON PR_Proyecto.cd_proyecto = [tmp - madurez planificacion].cd_proyecto) LEFT JOIN 1007_REPORTE_PRESUP ON [tmp - madurez planificacion].cd_proyecto = [1007_REPORTE_PRESUP].Código) ON AR_Area.Id = PR_Proyecto.Id_Area_Pertenece) LEFT JOIN TABLA_PALANCAS ON PR_Proyecto.Id = TABLA_PALANCAS.Id_Proyecto
WHERE (((ZPruebaZ.[Es cartera Actual?])=[Es cartera?]));
¿Teniendo en cuenta lo que me escribes como quedaría el código?
Intente y pienso que esto seria algo aproximado a lo que me pides
PARAMETERS [Es cartera?] Bit, [¿Fecha? (dd/mm/aaaa)] DateTime;
SELECT PR_Proyecto.Id, PR_Proyecto.cd_proyecto, PR_Proyecto.nm_proyecto, ZPruebaZ.[Es cartera Actual?], ZPruebaZ.[Vigencia Desde], ZPruebaZ.[Vigencia Hasta], ZPruebaZ.[Palanca Principal], ZPruebaZ.[Palanca Principal], ZPruebaZ.[Objetivo Principal], AR_Area.Id_Area_Padre, PR_Proyecto.Id_Area_Pertenece, [tmp - madurez planificacion].Nombre, [tmp - madurez planificacion].[Líder/es], [tmp - madurez planificacion].Estado, [tmp - madurez planificacion].[Madurez Planificación], PR_Proyecto.[Vigencia Desde], PR_Proyecto.[Vigencia Hasta], TABLA_PALANCAS.Palanca, TABLA_PALANCAS.Objetivo, [1007_REPORTE_PRESUP].[SumaDe2008- Presupuesto Actualizado], [1007_REPORTE_PRESUP].[SumaDe2008-Gasto], Year([¿Fecha? (dd/mm/aaaa)]) AS DisFecha, [SiInm]([disfecha]=2006,[SumaDe2006-Gasto],[SiInm]([disfecha]=2007,[SumaDe2007-Gasto],[SiInm]([disfecha]=2008,[SumaDe2008-Gasto],0))) AS Gasto, [SiInm]([disfecha]=2006,[SumaDe2006-Gasto],[SiInm]([disfecha]=2007,[SumaDe2006-Gasto]+[SumaDe2007-Gasto],[SiInm]([disfecha]=2008,[SumaDe2006-Gasto]+[SumaDe2007-Gasto]+[SumaDe2008-Gasto],0))) AS GastoAcumulado
FROM (AR_Area INNER JOIN (((PR_Proyecto INNER JOIN ZPruebaZ ON PR_Proyecto.Id = ZPruebaZ.Id) INNER JOIN [tmp - madurez planificacion] ON PR_Proyecto.cd_proyecto = [tmp - madurez planificacion].cd_proyecto) LEFT JOIN 1007_REPORTE_PRESUP ON [tmp - madurez planificacion].cd_proyecto = [1007_REPORTE_PRESUP].Código) ON AR_Area.Id = PR_Proyecto.Id_Area_Pertenece) LEFT JOIN TABLA_PALANCAS ON PR_Proyecto.Id = TABLA_PALANCAS.Id_Proyecto
WHERE (((ZPruebaZ.[Es cartera Actual?])=[Es cartera?]));
Pero también así logro el mismo mensaje de error la función [SiInm] no esta definida en la expresión
Otra vez Muchas gracias!
Saludos
ahi creo q enconte el problema
cuando pege el codigo se modifico solo
En tu post original pusiste IFF y me lo cambio por SiInm
Voy a hacer un par de pruebas y te digo
Saludos
Es lo mismo iif que silnm, una es en inglés y otra en español. Yo por costumbre en los SQL lo pongo siempre en inglés, a veces me he llevado una desagradable sorpresa cuando Access me decía que no reconocía Izq, Der trabajando con cadenas de texto.
Lo que hago es hacerme la consulta, copiar el SQL y luego manejarlo para llevarlo VBA.
El SQL que te pegué, lo hice directamente con Access tomado una tabla 1007 con los nombres de campos de tu imagen, en esa cadena aparece iif; lo pego en una consulta en mdb nuevo y no me da ningún problema.
Iif es el SI(prueba, valor si verdadero, valor si falso) de Excel, es como un if, silnm significa si el número
En una de las primeras BD's que hice utilizaba - para separar nombres de campo, si te das cuenta cuando escribes gastos-2007, Access lo cambia a [Gastos]-[2007], cuando debiera ser [Gastos-2007], eso no pasa con _ en lugar de -. No sé como de desarrollada tendrás ru BD, pero con esos SQL tan largos es posible que te merezca la pena utilizar _ en lugar de -. Yo ya no lo uso.
Toma tu SQL, utiliza un editor de texto potente, tipo ultra edit, reemplaza [Silnm] por iif, y debería funcionar. Una ventaja de ultra edit es que te permite ver el código y el SQL por colores según las instrucciones, es realmente cómodo.
Hola, bueno te cuento que diste en el clavo, el problema estaba en que el access traducía solo el iif en Sinm y la verdad no se por que hace esto. Pero fue cuestión de cambiarlo y listo funciona perfecto.
Muchas Gracias
Abrazo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas