SQL - Consulta SQL con Left Join

 
Vista:

Consulta SQL con Left Join

Publicado por Juan Suarez (2 intervenciones) el 07/04/2021 05:29:21
Hola,

Resulta que estoy intentando construir una consulta SQL usando joins para traer todos los registros de la tabla Referencias, luego de cada Referencia se debe determinar que cantidades estan en Pedidos, Compras y tambien en Pedidos pero de determinado Cliente. Estoy haciendo la consulta de la siguiente manera:

--Consulta solo Referencias
SELECT
Referencias.Referencia,
Referencias.Descripcion,
Referencias."Punto Minimo",
Referencias."Saldo Inicial Mes" + Referencias."Entradas Mes" - Referencias."Salidas Mes" AS KardexRef
FROM Referencias
WHERE Referencias.Bodega='01' and Referencias."Linea Referencia" ='14' AND Referencias."Estado Articulo" <> '9'
ORDER BY Referencias.Descripcion, Referencias.Referencia

Retorna 20.440 registros

Al agregar los Join para consultar Pedidos y las conpras de cada referencia, funciona correctamente, trae la misma cantidad de registros, 20.440

SELECT
Referencias.Referencia,
Referencias.Descripcion,
Referencias."Punto Minimo",
Referencias."Saldo Inicial Mes" + Referencias."Entradas Mes" - Referencias."Salidas Mes" AS KardexRef,
"Detalle Pedidos".PDI as PDIF,
"Detalle Compras".OCI as OCIF--,
--D.PDIEX as PDIEXF
FROM Referencias
left join (SELECT "Detalle Pedidos".Referencia, sum("Detalle Pedidos"."Cantidad Pedida" - "Detalle Pedidos"."Cantidad Facturada") AS PDI from "Detalle Pedidos" group by "Detalle Pedidos".Referencia) "Detalle Pedidos" on Referencias.Referencia = "Detalle Pedidos".Referencia
left join (SELECT "Detalle Compras".Referencia, sum("Detalle Compras"."Cantidad Pedida" - "Detalle Compras"."Cantidad Facturada") AS OCI from "Detalle Compras" group by "Detalle Compras".Referencia) "Detalle Compras" on Referencias.Referencia = "Detalle Compras".Referencia
--left join (SELECT "Detalle Pedidos".Referencia, sum("Detalle Pedidos"."Cantidad Pedida" - "Detalle Pedidos"."Cantidad Facturada") AS PDIEX from "Detalle Pedidos" WHERE ("Detalle Pedidos".Cliente ='90027' or "Detalle Pedidos".Cliente ='70222') group by "Detalle Pedidos".Referencia) AS D on Referencias.Referencia = "Detalle Pedidos".Referencia
WHERE Referencias.Bodega='01' and Referencias."Linea Referencia" ='14' AND Referencias."Estado Articulo" <> '9'
ORDER BY Referencias.Descripcion, Referencias.Referencia

Al retirar los comentarios del tercer Join que tiene un condicional Where para el Codigo del cliente me aumenta la cantidad de reigistros, me retorna 21.545 registros. El join al cual hago referencia esta comentado en el script anterior, sin embargo hago referencia a el:

left join (SELECT "Detalle Pedidos".Referencia, sum("Detalle Pedidos"."Cantidad Pedida" - "Detalle Pedidos"."Cantidad Facturada") AS PDIEX from "Detalle Pedidos" WHERE ("Detalle Pedidos".Cliente ='90027' or "Detalle Pedidos".Cliente ='70222') group by "Detalle Pedidos".Referencia) AS D on Referencias.Referencia = "Detalle Pedidos".Referencia

Cual puede ser el problema para que esta consulta retorne mas informacion cuando retiro el comentario del tercer join ?

Agradezco sus comentarios!

Juan Suárez.
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta SQL con Left Join

Publicado por Isaias (1921 intervenciones) el 07/04/2021 20:24:18
Por principio de cuentas, ¿Qué motor de base de datos ocupas?, segundo, ¿Por qué hacer sub-query?
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

Consulta SQL con Left Join

Publicado por Juan Suarez (2 intervenciones) el 07/04/2021 21:32:58
Hola Isaias,

Gracias por responder, el motor es Pervasive 11. Uso subconsultas porque fue la forma que encontré para obtener al menos dos datos.

Saludos!

Juan Suárez.
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