Problemas con instrucción SQL

29/04/2008 - 23:25 por ElTurle | Informe spam
Hola:

Tengo la siguiente instrucción sql:

SELECT Vencimientos.FEmision, Vencimientos.FVencimiento,
Empresas.Nombre, Vencimientos.NumEmpresa, Vencimientos.Factura,
Vencimientos.Total, Vencimientos.Remesa, Vencimientos.Banco,
[NumEntidad] & "-" & [NumSucursal] & "-" & [DC] & "-" & [Cuenta] AS
CtaCargo, CCC.Activa
FROM (Vencimientos INNER JOIN Empresas ON Vencimientos.NumEmpresa Empresas.IdEmpresa) LEFT JOIN CCC ON Empresas.IdEmpresa CCC.Id_Empresa
WHERE (((Vencimientos.Remesa)>0) AND
((Vencimientos.Banco)=DLookUp("[IdEmpresa]","Empresas","Remesas -1")) AND ((CCC.Activa)=-1));



En esta instrucción vinculo tres tablas Empresas y Vencimientos con
unión Inner Join y Empresas con CCC en unión left Join. La segunda
unión la hago así porque hay empresas que no tienen metida ninguna
cuenta bancaria, por lo que necesito que me muestre el registro aunque
no tenga cuenta bancaria. Pero la tabla de CCC admite varias cuentas
bancarias por empresa y mediante el campo Activa indico la cuenta en
la que se debe hacer el cargo y al poner la clausula en WHERE
CCC.Activa = -1 , ya no me saca los registros de vencimientos que no
tienen cuenta bancaria.

Por lo que lo que necesitaría que me hiciese la instrucción sql es:
que si la empresa no tiene cuenta me saque el registro sin cuenta y
que si tiene varias cuentas me saque aquella que tenga marcada como
activa.

Un Saludo y muchas gracias.
Juan Carlos

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
29/04/2008 - 23:38 | Informe spam
Hola Juan Carlos,

On 29 apr, 23:25, ElTurle wrote:
Hola:

Tengo la siguiente instrucción sql:

SELECT Vencimientos.FEmision, Vencimientos.FVencimiento,
Empresas.Nombre, Vencimientos.NumEmpresa, Vencimientos.Factura,
Vencimientos.Total, Vencimientos.Remesa, Vencimientos.Banco,
[NumEntidad] & "-" & [NumSucursal] & "-" & [DC] & "-" & [Cuenta] AS
CtaCargo, CCC.Activa
FROM (Vencimientos INNER JOIN Empresas ON Vencimientos.NumEmpresa > Empresas.IdEmpresa) LEFT JOIN CCC ON Empresas.IdEmpresa > CCC.Id_Empresa
WHERE (((Vencimientos.Remesa)>0) AND
((Vencimientos.Banco)=DLookUp("[IdEmpresa]","Empresas","Remesas > -1")) AND ((CCC.Activa)=-1));



En esta instrucción vinculo tres tablas Empresas y Vencimientos con
unión Inner Join y Empresas con CCC en unión left Join.  La segunda
unión la hago así porque hay empresas que no tienen metida ninguna
cuenta bancaria, por lo que necesito que me muestre el registro aunque
no tenga cuenta bancaria. Pero la tabla de CCC admite varias cuentas
bancarias por empresa y mediante el campo Activa indico la cuenta en
la que se debe hacer el cargo y al poner la clausula en WHERE
CCC.Activa = -1 , ya no me saca los registros de vencimientos que no
tienen cuenta bancaria.

Por lo que lo que necesitaría que me hiciese la instrucción sql es:
que si la empresa no tiene cuenta me saque el registro sin cuenta y
que si tiene varias cuentas me saque aquella que tenga marcada como
activa.




Prueba con la condición CCC.Activa = -1 en el JOIN
en vez de en el WHERE.

LEFT JOIN CCC ON
Empresas.IdEmpresa = CCC.Id_Empresa AND CCC.Activa = -1

y ya verás como entonces va bien.

Piensa que las condiciones del where se aplican al
resultado del join, que no es lo mismo que una
condición que 'determina' el join.

Espero se entienda.

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 ElTurle
30/04/2008 - 09:32 | Informe spam
On 29 abr, 23:38, "Carlos M. Calvelo" wrote:
Hola Juan Carlos,

On 29 apr, 23:25, ElTurle wrote:





> Hola:

> Tengo la siguiente instrucción sql:

> SELECT Vencimientos.FEmision, Vencimientos.FVencimiento,
> Empresas.Nombre, Vencimientos.NumEmpresa, Vencimientos.Factura,
> Vencimientos.Total, Vencimientos.Remesa, Vencimientos.Banco,
> [NumEntidad] & "-" & [NumSucursal] & "-" & [DC] & "-" & [Cuenta] AS
> CtaCargo, CCC.Activa
> FROM (Vencimientos INNER JOIN Empresas ON Vencimientos.NumEmpresa > > Empresas.IdEmpresa) LEFT JOIN CCC ON Empresas.IdEmpresa > > CCC.Id_Empresa
> WHERE (((Vencimientos.Remesa)>0) AND
> ((Vencimientos.Banco)=DLookUp("[IdEmpresa]","Empresas","Remesas > > -1")) AND ((CCC.Activa)=-1));

>

> En esta instrucción vinculo tres tablas Empresas y Vencimientos con
> unión Inner Join y Empresas con CCC en unión left Join.  La segunda
> unión la hago así porque hay empresas que no tienen metida ninguna
> cuenta bancaria, por lo que necesito que me muestre el registro aunque
> no tenga cuenta bancaria. Pero la tabla de CCC admite varias cuentas
> bancarias por empresa y mediante el campo Activa indico la cuenta en
> la que se debe hacer el cargo y al poner la clausula en WHERE
> CCC.Activa = -1 , ya no me saca los registros de vencimientos que no
> tienen cuenta bancaria.

> Por lo que lo que necesitaría que me hiciese la instrucción sql es:
> que si la empresa no tiene cuenta me saque el registro sin cuenta y
> que si tiene varias cuentas me saque aquella que tenga marcada como
> activa.

Prueba con la condición CCC.Activa = -1 en el JOIN
en vez de en el WHERE.

LEFT JOIN CCC ON
Empresas.IdEmpresa = CCC.Id_Empresa AND CCC.Activa = -1

y ya verás como entonces va bien.

Piensa que las condiciones del where se aplican al
resultado del join, que no es lo mismo que una
condición que 'determina' el join.

Espero se entienda.

Saludos,
Carlos- Ocultar texto de la cita -

- Mostrar texto de la cita -



Hola Carlos:

He puesto la instrucción como me has indicado y me sale el siguiente
error: "La expresión de combinación no está admitida".

La instrucción completa es:

SELECT Vencimientos.FEmision, Vencimientos.FVencimiento,
Empresas.Nombre, Vencimientos.NumEmpresa, Vencimientos.Factura,
Vencimientos.Total, Vencimientos.Remesa, Vencimientos.Banco,
[NumEntidad] & "-" & [NumSucursal] & "-" & [DC] & "-" & [Cuenta] AS
CtaCargo, CCC.Activa
FROM (Vencimientos INNER JOIN Empresas ON Vencimientos.NumEmpresa Empresas.IdEmpresa) LEFT JOIN CCC ON Empresas.IdEmpresa CCC.Id_Empresa AND CCC.Activa = -1
WHERE (Vencimientos.Remesa > 0 AND Vencimientos.Banco DLookUp("[IdEmpresa]","Empresas","Remesas = -1");



Un saludo.
Juan Carlos
Respuesta Responder a este mensaje
#3 raimonegara
30/04/2008 - 10:32 | Informe spam
Hola Juan Carlos. ¿ Desde donde ejecutas esta consulta ?, ¿ Quizás
desde Microsoft Access ?
Respuesta Responder a este mensaje
#4 raimonegara
30/04/2008 - 10:35 | Informe spam
... el mensaje anterior viene a cuento, porque si no voy errado,
DLookup es una función agregada de dominio, disponible en Access pero
no en Sql Server.

Adios, un saludo.
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
30/04/2008 - 10:38 | Informe spam
Hola Juan Carlos,

Ni me había fijado en tu primer post, pero estás trabajando con
MS-Access SQL, no con T-SQL (SQL Server).



Hola Carlos:

He puesto la instrucción como me has indicado y me sale el siguiente
error: "La expresión de combinación no está admitida".

La instrucción completa es:

SELECT Vencimientos.FEmision, Vencimientos.FVencimiento,
Empresas.Nombre, Vencimientos.NumEmpresa, Vencimientos.Factura,
Vencimientos.Total, Vencimientos.Remesa, Vencimientos.Banco,
[NumEntidad] & "-" & [NumSucursal] & "-" & [DC] & "-" & [Cuenta] AS
CtaCargo, CCC.Activa



Concanetación de cadenas en T-SQL se hace con +, no con &.
Para literales debes usar ' en vez de "; p.e. '-' en vez de "-".
Además si algunos de los atributos (como NumEntidad) son
numéricos deberías hacer antes una conversión a varchar, por
ejemplo.

cast([NumEntidad] as varchar) + '-' + etc.

FROM (Vencimientos INNER JOIN Empresas ON Vencimientos.NumEmpresa > Empresas.IdEmpresa) LEFT JOIN CCC ON Empresas.IdEmpresa > CCC.Id_Empresa AND CCC.Activa = -1



Con ms-access, no sé, pero creo que esto no va a ser posible.

WHERE (Vencimientos.Remesa > 0 AND Vencimientos.Banco > DLookUp("[IdEmpresa]","Empresas","Remesas = -1");




Qué es DLookUp? (Y aquí están otra vez los " en vez de ').

No conozco ms-access sql para poder ayudarte. Si la consulta
original funcionaba, seguro que estás usando ms-access.

A ver si alguien familirizado con ms-access te puede ayudar.
O puedes exponer tu pregunta en un foro de ms-access
(microsoft.public.es.access)

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida