Access - traducir consulta de sqlserver a access

 
Vista:
sin imagen de perfil

traducir consulta de sqlserver a access

Publicado por julio (7 intervenciones) el 09/10/2017 16:53:53
Hola a todos.
Tengo un codigo de sqlserver que quiero hacer funcionar en access.El codigo es este.
1
2
3
4
5
6
7
8
9
DECLARE @año integer = 2017;
 
SELECT p.dni AS 'DNI',b.barrio AS 'BARRIO',t.[numero de casa] AS 'NUMERO DE CASA', ma.fecha AS 'FECHAA', md.fecha AS 'FECHAB', 
(DATEDIFF(day, ma.fecha,md.fecha)) AS 'DIAS ENTRE MEDICIONES',(md.litros - ma.litros) AS 'LITROS CONSUMIDOS' from [consulta].[dbo].[mediciones] md
inner join [consulta].[dbo].[tomas]  t on t.id = md.id_toma
inner join [consulta].[dbo].[propietarios]  p on p.dni = t.dni_propietario
inner join [consulta].[dbo].[barrios]  b on b.id = t.id_barrio
inner join [consulta].[dbo].[mediciones]  ma on month(ma.fecha) = month(DATEADD(month,-1,md.fecha)) and year(ma.fecha) = year(DATEADD(month,-1,md.fecha))
 where year(md.fecha) = @año;

Estas son la relaciones de la base de datos de access.
basedatostraida
alguien sabria ayudarme? gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

traducir consulta de sqlserver a access

Publicado por Anonimo (3316 intervenciones) el 09/10/2017 18:16:00
Faltan datos, en particular una tabla (que es probable exista en SQL Server y aquí se quedase ene el tintero)

Las funciones que tratan las fechas no se corresponden con la sintaxis de Access
.- DATEDIFF(day, ma.fecha,md.fecha) ==> DATEDIFF("d", ma.fecha,md.fecha)

.- DATEADD(month,-1,md.fecha) ===> DATEADD("m",-1,md.fecha)

Esta parte:
month(ma.fecha) = month(DATEADD(month,-1,md.fecha)) and year(ma.fecha) = year(DATEADD(month,-1,md.fecha)

Podria expresarse asi:
.- Format(ma.fecha,"mmyyyy") = Format(DATEADD("m",-1,md.fecha), "mmyyyy")

El resto (componer la consulta) se puede hacer utilizando el generador grafico de consultas

Nota:
La medición anterior ¿se corresponderá siempre con el mes anterior?
Lo lógico seria que la anterior sea siempre la mayor de las menores que la que se utiliza como referente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

traducir consulta de sqlserver a access

Publicado por julio (7 intervenciones) el 09/10/2017 19:33:36
hola anonimo.
gracias por tu respuesta.
la base de datos solo tiene 4 tablas en ambas consultas, al menos no veo ninguna de mas.
pues tienes razon. no se corresponde siempre con el mes anterior. tu forma tiene mas logica. podrias decirme como seria esa seleccion de la mayor de las menores?
voy a intentar hacer que funcione con ese cambio en las funciones de fechas. comentare con lo que consiga. gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

traducir consulta de sqlserver a access

Publicado por julio (7 intervenciones) el 09/10/2017 20:37:58
Antes de nada realice unas modificaciones sobre la base de datos, elimine la tabla barrio, y en la tabla toma cambie 'id_barrio' y 'Numero de casa' por 'numero catastro' ya que simplificaba las tablas y es el nuevo método utilizado para las lecturas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT p.dni AS [DNI], t.[numero catastro] AS [CATASTRO], ma.fecha
 
AS [FECHA A], md.fecha AS [FECHA B],
(DATEDIFF("d", ma.fecha,md.fecha)) AS [DIAS ENTRE MEDICIONES],
 
(md.litros - ma.litros) AS [LITROS CONSUMIDOS]
 
from mediciones md
inner join tomas  t on t.id = md.id_toma
inner join Propietarios  p on p.dni = t.dni_propietario
inner join mediciones  ma on Format(ma.fecha,"mmyyyy") = Format
 
(DATEADD("m",-1,md.fecha), "mmyyyy")
 where year(md.fecha) = [2017];

Esto es lo que tengo pero me da error:
" Error de sintaxis (falta operador) en la expersion de consulta ´'t.id = md.id_toma
inner join Propietarios p on p.dni = t.dni_propietario
inner join mediciones ma on Format(ma.fecha,"mmyyyy")' "

Alguien podria decirme que estoy haciendo mal? gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

traducir consulta de sqlserver a access

Publicado por Anonimo (3316 intervenciones) el 10/10/2017 01:02:24
En principio parece estar correcta, solo hay algo que no es consecuente el 'Where' del final ¿Por qué al año se le encierra entre corchetes?

Los corchetes forzarían a que ese dato (ese valor numérico) se tomase como una variable / el nombre de un campo de cualquiera de las tablas / un parámetro .... y a Access los números como nombres de objetos le sientan muy mal.

Si desease obtener (en este caso concreto) el valor anterior de un registro en un conjunto ascendente (las medidas irán en aumento y las fechas también) le puedo pedir la medida mas alta de una fecha que sea inferior a la fecha que le pasa como referencia, asi podrá calcularse para cualquier fecha de la tabla (con la excepción de la primera)

1
Medida_anterior = DMax ("Litros", "medidones", "Fecha < #" & Aquí_una_fecha & "#" )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

traducir consulta de sqlserver a access

Publicado por julio (7 intervenciones) el 10/10/2017 01:50:53
gracias por tu respuesta. le quito los corchetes al 2017 y me sigue dando el mismo error. ninguna otra sugerencia?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

traducir consulta de sqlserver a access

Publicado por Anonimo (3316 intervenciones) el 10/10/2017 02:33:20
Tal como transcribes los datos, es difícil apreciar s hay un problema en ellos o los genera el editor de texto al transcribirlos.

La mejor sugerencia seria que analizaras lo que has creado y te replanteases como llevar a buen termino esa aplicación desde cero .

Para un seguimiento de los consumos de una serie de contadores de agua, bastaría con dos tablas, una la definición del contador (un contador por vivienda, una vivienda con una dirección exclusiva, un pagador por vivienda (el cliente) ... etc. todo ello nos lleva a que esos datos únicos deberían ir todos en una misma tabla como parte del mismo registro.

Lo que si se repite (de forma cíclica) son las tomas de mediciones y por ello requieren una tabla aparte con esos datos asociada por el ID del contador (u otro dato de esa índole) a la tabla principal.

Si todo esta bien hecho, extraer datos repetidos (por ejemplo el barrio) si solo se necesita para crear subconjuntos esos se pueden conseguir con consultas

Pero todo esto es simple utopía, dado que los datos que se aportan no dan para mas.

Por cierto ...¿has utilizado el generador grafico de consultas que Access tiene? ... es que algunas cosas las debería verificar y no parecerían datos inventados (como los nombres de tablas en la exposición inicial y los utilizados en las consultas)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

traducir consulta de sqlserver a access

Publicado por julio (7 intervenciones) el 10/10/2017 02:47:27
En este caso son necesarias las 3 tablas porque hay propietarios que tienen varias propiedades a su nombre, algunas sin vivienda pero si con toma de agua para futura construccion, como esas fincas aun no tiene direccion para unificar tomo el numero de catastro para identificar cada toma de agua.
Estas son mis tablas y las relaciones si te refieres a esto con la falta de datos.
relaciones
tomas
propietarios
mediciones
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar