Problemas consulta fechas diferentes en dos campos

Tengo que confeccionar una consulta en la que entre otras cuestiones, tengo 4 campos que debo combinar. Corresponde dos de ellos a fechas (habitualmente son fechas (meses) diferentes y las otras dos son de importe.
Para determinar, diremos que tengo
Fecha 1
Fecha 2
Importe 1
Importe 2
Me gustaría que me indicarais como puedo obtener una consulta en la que marcando con parámetros el mes y el Año, me obtenga todos los registros que han tenido importes en el mes solicitado, ya sea en ambos importes (1 y 2) o en alguno de ellos, teniendo en cuenta que si solo ha tenido en uno de ellos, el otro me aparezca 0 (en el caso de haber sido registrado el importe en meses anteriores).
Todos los datos están en una misma tabla.
Intentando crear una imagen de lo que he explicado sería como sigue:
Expediente Fecha cobro 1 Importe 1 Fecha cobro 2 Importe 2
--------------- ------------------ ------------ ------------------ -------------
234567 18.02.08 1.300,00 27.02.08 400,00
234568 15.01.08 0,00 13.02.08 300,00
234569 27.02.08 800,00 12.01.08 0,00
234570 (1) (1) 15.02.08 35,00
(1) Si no se ha registrado nada, que aparezca en blanco o PENDIENTE,
He intentado con condicionales del tipo SiInm((([Fecha cobro1, con formato mmaaaa,]))(([Fecha cobro 2, tambin con formato mmaaaa]));0;[Importe 2]) y el mismo criterio pero adaptado para Importe 1, PERO NO ME FUNCIONA, me devuelve siempre importes 0 para todo.
Gracias.
Respuesta
1
Es una consulta de selección, en SQL sería algo así:
Select * from tabla1 where [fecha cobro1]=fecha1 or [fecha cobro2]=fecha1
Luego cuando ejecutas la consulta, te preguntará la fecha1 (como texto) y mostrará los registros de la tabla que sean de esa fecha.
PD. Si fecha de cobro es un campo texto y el día no lo quieres especificar, cambia [fecha cobro1] por right([fecha cobro1], 5) y [fecha cobro2] por right([fecha cobro2], 5)
Si es un campo fecha debes aplicar la fórmula: (según la ayuda de access)
FormatDateTime (fecha[, formatoConNombre])
La sintaxis de la función FormatDateTime consta de las siguientes partes:
ParteDescripción
Fecha
Requerido. La expresión de fecha que se formateará.
FormatoConNombre
Opcional. Un valor numérico que indica el formato de fecha y hora utilizado. Si se omite, se utiliza vbGeneralDate.
Valores
El argumento formatoConNombre tiene los siguientes valores:
ConstanteValorDescripción
VbGeneralDate
0
Mostrar una fecha y/u hora. Si hay una parte con la fecha, se muestra como fecha corta. Si hay una parte con la hora, se muestra como una hora larga. Si están presentes, se muestran las dos partes.
VbLongDate
1
Mostrar una fecha utilizando el formato de fecha larga especificado en la configuración regional de su equipo.
VbShortDate
2
Mostrar una fecha utilizando el formato de fecha corta especificado en la configuración regional de su equipo.
VbLongTime
3
Mostrar una hora utilizando el formato de hora especificado en la configuración regional de su equipo.
VbShortTime
4
Mostrar una hora utilizando el formato de 24 horas (hh:mm).
Saludos. Jorge
Gracias Experto por tu interés y consideración.
Tu consejo me funciona parcialmente. La sentencia SQL que tengo incorporada ahora es la siguiente:
FROM [Financiaciones global]
WHERE [Fecha cobro comisión]=(((((Month([Fecha cobro comisión]))=[mes del año (1-12)]) And ((Year([Fecha cobro comisión]))=[Año (xxxx)]))) OR [Fecha cobro Seguros]=((Month([Fecha cobro Seguros]))=[mes del año (1-12)]) AND ((Year([Fecha cobro Seguros]))=[Año (xxxx)]))
Lo admite pero no encuentra ningún registro.
He probado con:
FROM [Financiaciones global]
WHERE (((((Month([Fecha cobro comisión]))=[mes del año (1-12)]) And ((Year([Fecha cobro comisión]))=[Año (xxxx)]))) OR ((Month([Fecha cobro Seguros]))=[mes del año (1-12)]) AND ((Year([Fecha cobro Seguros]))=[Año (xxxx)]))
Pero no me acaba de funcionar, porque si solicito Mes 2 y Año 2008, me dice todos los registros de Comisiones, y también los de Seguros (a pesar de ser Mes 1 y 2008).
Lo que me gustaría es que dado que en el mismo registro, aparecen dos fechas diferentes por conceptos diferentes, que aparezca el que corresponde al mes solicitado, o los dos si es que se registran con fecha del mismo mes, pero si uno de ellos no lo es que apareciera en blanco.
De ahí lo que te comentaba en mi primera comunicado sobre los condicionales que estaba trabajando SiInm((([Fecha cobro comisión, con formato mmaaaa,])) Mayor o menor que (([Fecha cobro comisión, tambienn con formato mmaaaa]));0;[Importe 2]) y el mismo criterio pero adaptado para Importe 1
Te adjunto la SQL en la que estoy trabajando para que te hagas una idea más global:
SELECT [Financiaciones global].Fecha, [Financiaciones global].[Nº Expediente], [Financiaciones global].Financiera, [Financiaciones global].[Rappel Si/No], [Financiaciones global].[Importe ?], [Financiaciones global].[% Comisión], [Financiaciones global].Seguros, [Financiaciones global].[Fecha cobro comisión], [Financiaciones global].[Comisión cobrada], [Financiaciones global].[Fecha cobro Seguros], [Financiaciones global].[Seguros cobrado], [Financiaciones global].[Conforme ? cobrados], [Financiaciones global].[Observaciones (Administración)]
FROM [Financiaciones global]
WHERE [Fecha cobro comisión]=(((((Month([Fecha cobro comisión]))=[mes del año (1-12)]) And ((Year([Fecha cobro comisión]))=[Año (xxxx)]))) OR [Fecha cobro Seguros]=((Month([Fecha cobro Seguros]))=[mes del año (1-12)]) AND ((Year([Fecha cobro Seguros]))=[Año (xxxx)]))
ORDER BY [Financiaciones global].[Fecha cobro comisión];
Agradeceré, una vez más, tus sugerencias, pues estoy bloqueado (además de ser novato) en esta consulta y no puedo continuar para finalizar la base de datos.
Gracias
Miquel
Bien.- Me sirve parcialmente:
Tu consejo me funciona parcialmente. La sentencia SQL que tengo incorporada ahora es la siguiente:
FROM [Financiaciones global]
WHERE [Fecha cobro comisión]=(((((Month([Fecha cobro comisión]))=[mes del año (1-12)]) And ((Year([Fecha cobro comisión]))=[Año (xxxx)]))) OR [Fecha cobro Seguros]=((Month([Fecha cobro Seguros]))=[mes del año (1-12)]) AND ((Year([Fecha cobro Seguros]))=[Año (xxxx)]))
Lo admite pero no encuentra ningún registro.
He probado con:
FROM [Financiaciones global]
WHERE (((((Month([Fecha cobro comisión]))=[mes del año (1-12)]) And ((Year([Fecha cobro comisión]))=[Año (xxxx)]))) OR ((Month([Fecha cobro Seguros]))=[mes del año (1-12)]) AND ((Year([Fecha cobro Seguros]))=[Año (xxxx)]))
pero no me acaba de funcionar, porque si solicito Mes 2 y Año 2008, me dice todos los registros de Comisiones, y también los de Seguros (a pesar de ser Mes 1 y 2008).
Lo que me gustaría es que dado que en el mismo registro, aparecen dos fechas diferentes por conceptos diferentes, que aparezca el que corresponde al mes solicitado, o los dos si es que se registran con fecha del mismo mes, pero si uno de ellos no lo es que apareciera en blanco.
De ahí lo que te comentaba en mi primera comunicado sobre los condicionales que estaba trabajando SiInm((([Fecha cobro comisión, con formato mmaaaa,])) Mayor o menor que (([Fecha cobro comisión, tambienn con formato mmaaaa]));0;[Importe 2]) y el mismo criterio pero adaptado para Importe 1
Te adjunto la SQL en la que estoy trabajando para que te hagas una idea más global:
SELECT [Financiaciones global].Fecha, [Financiaciones global].[Nº Expediente], [Financiaciones global].Financiera, [Financiaciones global].[Rappel Si/No], [Financiaciones global].[Importe ?], [Financiaciones global].[% Comisión], [Financiaciones global].Seguros, [Financiaciones global].[Fecha cobro comisión], [Financiaciones global].[Comisión cobrada], [Financiaciones global].[Fecha cobro Seguros], [Financiaciones global].[Seguros cobrado], [Financiaciones global].[Conforme ? cobrados], [Financiaciones global].[Observaciones (Administración)]
FROM [Financiaciones global]
WHERE [Fecha cobro comisión]=(((((Month([Fecha cobro comisión]))=[mes del año (1-12)]) And ((Year([Fecha cobro comisión]))=[Año (xxxx)]))) OR [Fecha cobro Seguros]=((Month([Fecha cobro Seguros]))=[mes del año (1-12)]) AND ((Year([Fecha cobro Seguros]))=[Año (xxxx)]))
ORDER BY [Financiaciones global].[Fecha cobro comisión];
Agradeceré, una vez más, tus sugerencias, pues estoy bloqueado (además de ser novato) en esta consulta y no puedo continuar para finalizar la base de datos.
Gracias
Miquel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas