Access - Dos Join en una misma clausula FROM

   
Vista:

Dos Join en una misma clausula FROM

Publicado por Esteban Javier Suárez Pérez (2 intervenciones) el 26/01/2009 19:05:35
Bueno, tengo la siguiente consulta sql para Access:
SELECT Clientes.[Holder_id],UCase(Trim([Clientes]![Titular_Primer_Apellido]&" "&[Clientes]![Titular_Segundo_Apellido]&" "&[Clientes]![Titular_Primer_Nombre]&" "&[Clientes]![Titular_Segundo_Nombre])) AS TITULAR, Clientes.[Dirección_Titular], [Ciudades].Ciudad, [Ciudades].País, UCase(Format([Inicial],"mmmm yyyy")) AS EXTRACTO, [Extractos_Filtro].Final, IIf(IsNull([SALDO]),0,Round([SALDO],4)) AS SINICIAL, Sum(IIf(IsNull([DSHARES]),0,[DSHARES])) AS DEBITOS, Sum(IIf(IsNull([CSHARES]),0,[CSHARES])) AS CREDITOS, Round([SINICIAL]+[DEBITOS]+[CREDITOS],4) AS SFINAL, IIf(IsNull([Precios].[Valor_Precio]),0,[Precios].[Valor_Precio]) AS PINICIAL, IIf(IsNull([PRECIOS_1].[Valor_Precio]),0,[PRECIOS_1].[Valor_Precio]) AS PFINAL, IIf(IsNull([Rentabilidad].[Rentabilidad_Período]),0,[Rentabilidad].[Rentabilidad_Peíodo]) AS RENTA
FROM (([Extractos_Filtro] LEFT JOIN Precios ON [Extractos_Filtro].Inicial = Precios.Fecha) LEFT JOIN Rentabilidad ON [Extractos_Filtro].f_saldo = Rentabilidad.Fecha) LEFT JOIN Precios AS PRECIOS_1 ON [Extractos_Filtro].f_saldo = PRECIOS_1.Fecha,((Clientes LEFT JOIN [Ciudades] ON Clientes.[Id_Ubicación] = [Ciudades].Id) LEFT JOIN Extractos_Saldo_Inicial ON Clientes.[Holder_id] = Extractos_Saldo_Inicial.CLIENTE) LEFT JOIN Extractos_Movimientos ON Clientes.[Holder_id] = Extractos_Movimientos.CLIENTE
WHERE (((Clientes.Estado)="Activo"))
GROUP BY Clientes.[Holder_id],UCase(Trim([Clientes]![Titular_Primer_Apellido]&" "&[Clientes]![Titular_Segundo_Apellido]&" "&[Clientes]![Titular_Primer_Nombre]&" "&[Clientes]![Titular_Segundo_Nombre] , Clientes.[Dirección_Titular], [Ciudades].Ciudad, [Ciudades].País, UCase(Format([Inicial],"mmmm yyyy")), [Extractos_Filtro].Final, IIf(IsNull([SALDO]),0,Round([SALDO],4)), IIf(IsNull([Precios].[Valor_Precio]),0,[Precios].[Valor_Precio]), IIf(IsNull([PRECIOS_1].[Valor_Precio]),0,[PRECIOS_1].[Valor_Precio]), IIf(IsNull([Rentabilidad].[Rentabilidad_Período]),0,[Rentabilidad].[Rentabilidad_Período]);

Al ejecutarla me aparece el siguientes mensaje de error: La Expresión JOIN no se admite.Quisiera saber la causa de esto y pues la posible solución, ya que es necesario que haga esta consulta de este modo, es decir, que traiga todos los datos con esa sola consulta.Gracias de antemano.
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

RE:Dos Join en una misma clausula FROM

Publicado por Chea (1015 intervenciones) el 26/01/2009 22:38:55
A simple vista, llama la atención lo de AS PRECIOS_1

...LEFT JOIN Precios AS PRECIOS_1...

Quizás si lo suprimes funciona.

Saludos
José Bengoechea Ibaceta
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

RE:Dos Join en una misma clausula FROM

Publicado por Esteban Suárez (10 intervenciones) el 26/01/2009 22:55:47
Gracias por la respuesta José pero ya le quite el alias a la tabla precios y sigue sin admitir el Join. Ahora bien si corro la consulta por ejemplo con solo esto FROM (([Extractos_Filtro] LEFT JOIN Precios ON [Extractos_Filtro].Inicial = Precios.Fecha) LEFT JOIN Rentabilidad ON [Extractos_Filtro].f_saldo = Rentabilidad.Fecha) LEFT JOIN Precios AS PRECIOS_1 ON [Extractos_Filtro].f_saldo = PRECIOS_1.Fecha ovbiamente quitandole los campos que tienen que ver con esta parte del join ((Clientes LEFT JOIN [Ciudades] ON Clientes.[Id_Ubicación] = [Ciudades].Id) LEFT JOIN Extractos_Saldo_Inicial ON Clientes.[Holder_id] = Extractos_Saldo_Inicial.CLIENTE) LEFT JOIN Extractos_Movimientos ON Clientes.[Holder_id] = Extractos_Movimientos.CLIENTE; la consulta funciona normalmente.Entonces no se si el problema sea tratar de juntar estos dos bloques de Join en un solo FROM, pero es que necesito generar un informe que muestre la información más o menos de esa forma. Agradezco su ayuda.
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

RE:Dos Join en una misma clausula FROM

Publicado por Chea (1015 intervenciones) el 27/01/2009 00:36:29
Francamente, me cuesta mucho leer y sacar algo en claro de una query tan larga. Quizás esa complejidad sea causa del problema.

Yo para un informe intentaría no hacer una consulta tan larga. Si se ha de mostrar sólo un registro de la tabla relacionada y, salvo que afecten a campos por los que deba agrupar ordenar o filtrar, no usaría en el origen más tablas que la principal y procuraría usar para todo lo demás cuadros combinados.

Ten en cuenta que los cuadros combinados, aunque sí se vea en modo diseño, no muestran el botón de despliegue en la presentación, sino que aparecen como si fueran cuadros de texto.

Saludos
José Bengoechea Ibaceta
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

RE:Dos Join en una misma clausula FROM

Publicado por Esteban Javier Suárez (10 intervenciones) el 30/01/2009 22:47:46
Gracias por la anteriro respuesta, pues decidí partir la consulta en tres, dos consultas auxiliares de la tercera, asi quedaron:

Consulta Precios_Rentabilidad:
SELECT UCase(Format([Inicial],"mmmm yyyy")) AS EXTRACTO, [Extractos_Filtro].Final, IIf(IsNull([Precios].[Valor_Precio]),0,[Precios].[Valor_Precio]) AS PINICIAL, IIf(IsNull([PRECIOS_1].[Valor_Precio]),0,[PRECIOS_1].[Valor_Precio]) AS PFINAL, IIf(IsNull([Rentabilidad].[Rentabilidad_Período]),0,[Rentabilidad].[Rentabilidad_Período]) AS RENTA_PERIODO
FROM ((Extractos_Filtro LEFT JOIN Precios ON Extractos_Filtro.Inicial=Precios.Fecha) LEFT JOIN Rentabilidad ON Extractos_Filtro.f_saldo=Rentabilidad.Fecha) LEFT JOIN Precios AS PRECIOS_1 ON Extractos_Filtro.f_saldo=PRECIOS_1.Fecha;

Consulta Clientes_Saldo:
SELECT Clientes.[Holder_id], UCase(Trim(Clientes!Titular_Primer_Apellido & " " & Clientes!Titular_Segundo_Apellido & " " & Clientes!Titular_Primer_Nombre & " " & Clientes!Titular_Segundo_Nombre)) AS TITULAR, Clientes.[Dirección_Titular], [Ciudades].Ciudad, [Ciudades].País, IIf(IsNull([SALDO]),0,Round([SALDO],4)) AS SINICIAL, Sum(IIf(IsNull([DSHARES]),0,[DSHARES])) AS DEBITOS, Sum(IIf(IsNull([CSHARES]),0,[CSHARES])) AS CREDITOS, Round([SINICIAL]+[DEBITOS]+[CREDITOS],4) AS SFINAL
FROM ((Clientes LEFT JOIN Ciudades ON Clientes.[Id_Ubicación]=[Ciudades].Id) LEFT JOIN Extractos_Saldo_Inicial ON Clientes.[Holder_id]=Extractos_Saldo_Inicial.CLIENTE) LEFT JOIN Extractos_Movimientos ON Clientes.[Holder_id]=Extractos_Movimientos.CLIENTE
WHERE (((Clientes.Estado)="Activo"))
GROUP BY Clientes.[Holder_id], UCase(Trim(Clientes!Titular_Primer_Apellido & " " & Clientes!Titular_Segundo_Apellido & " " & Clientes!Titular_Primer_Nombre & " " & Clientes!Titular_Segundo_Nombre)), Clientes.[Dirección_Titular], [Ciudades].Ciudad, [Ciudades].País, IIf(IsNull([SALDO]),0,Round([SALDO],4));

Consulta Extracto_Informe:
SELECT Holder_id, TITULAR, Dirección_Titular, Ciudad, País, SINICIAL, DEBITOS, CREDITOS, SFINAL, EXTRACTO, PINICIAL, Final, PFINAL, RENTA_PERIODO
FROM Precios_Rentabilidad, Cilentes_Saldo;

En la que se basa el informe es en la ultima y al parecer funciona como la super consulta que habia colocado con anterioridad. Si deponto las puede comparar me gustaria saber si efectivamente estan cumpliendo la misma función. Gracias de nuevo
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