Ordenes de venta con orden de entrega o factura?

Hola amigos, por favor necesito que me ayuden con el siguiente query, necesito obtener todas las ordenes de venta y ver cuales se les ha entregado orden de entrega y cuales se han facturado, intente hacer algo pero me salen solo las ordenes de entrega junto con un Num y una fecha de factura que no corresponde porque no se han facturado.

SELECT DISTINCT T0.[DocNum], T0.[DocDate], T0.[CardName], T2.[DocNum], T2.[DocDate], T4.[DocNum], T4.[DocDate]  FROM ORDR T0
LEFT JOIN DLN1 T1 ON T1.[BaseEntry] = T0.[DocEntry] 
LEFT JOIN ODLN T2 ON T1.[DocEntry] = T2.[DocEntry]
LEFT JOIN  INV1 T3 ON T3.[BaseEntry] = T2.[DocEntry] 
LEFT JOIN OINV T4 ON T3.[DocEntry] = T4.[DocEntry] WHERE T0.[DocDate] >=[%0] AND  T0.[DocDate] <=[%1]
1 me gusta

si cambias la relacion de las DLN1 y INV1 de BaseEntry por BaseRef = DocNum?

Hola @Ari_Olivar, intenta lo que te dice @Daniel_Torrez.

También podrías agregar estas validaciones en el WHERE para reforzar la relación de tus documentos:

SELECT DISTINCT T0.[DocNum], T0.[DocDate], T0.[CardName], T2.[DocNum], T2.[DocDate], T4.[DocNum], T4.[DocDate] 
FROM ORDR T0
LEFT JOIN DLN1 T1 ON T1.[BaseEntry] = T0.[DocEntry]
LEFT JOIN ODLN T2 ON T1.[DocEntry] = T2.[DocEntry]
LEFT JOIN INV1 T3 ON T3.[BaseEntry] = T2.[DocEntry]
LEFT JOIN OINV T4 ON T3.[DocEntry] = T4.[DocEntry] 
WHERE T1.[BaseType] = T0.[ObjType] AND T3.[BaseType] = T2.[ObjType]
AND T0.[DocDate] >=[%0] AND T0.[DocDate] <=[%1]

Saludos.

Gracias por la ayuda me sirvió mucho, ahora me salen las notas de entrega que se han facturado, sin embargo, tal como indique anteriormente me gustaría conocer cuales ordenes de venta se han facturado ya que la mayoría se facturan directamente sin hacer nota de entrega, quisiera obtener esta información en el mismo query, es decir,obtener todas las ordenes de venta y ver cuales ordenes de venta son facturadas, ya sean directamente o por nota de entrega, y que ordenes de venta no son facturadas

SELECT DISTINCT T0.[DocNum], T0.[DocDate], T0.[CardName], T2.[DocNum], T2.[DocDate], T4.[DocNum], T4.[DocDate]  FROM ORDR T0
LEFT JOIN DLN1 T1 ON T1.[BaseRef] = T0.[DocNum] 
LEFT JOIN ODLN T2 ON T1.[DocEntry] = T2.[DocEntry]
LEFT JOIN  INV1 T3 ON T3.[BaseRef] = T2.[DocNum] 
LEFT JOIN OINV T4 ON T3.[DocEntry] = T4.[DocEntry] 

WHERE T0.[DocDate] >=[%0] AND  T0.[DocDate] <=[%1]

A simple vista yo diría que tendrías que hacer algún UNION para obtener cada escenario y a lo ultimo unirlos.

Hola @Ari_Olivar, como dice @juliancab algo así podría servirte, usé HANA para hacer la consulta y la edité, así que cualquier error de sintaxis puedes corregirlo:

SELECT DISTINCT T0.[DocNum], T0.[DocDate], T0.[CardName], T2.[DocNum] AS NumeroEntrega, T2.[DocDate] AS FechaEntrega, T4.[DocNum], T4.[DocDate]  
FROM ORDR T0
INNER JOIN DLN1 T1 ON T1.[BaseEntry] = T0.[DocEntry] AND T1.[BaseType] = T0.[ObjType]
INNER JOIN ODLN T2 ON T1.[DocEntry] = T2.[DocEntry]
LEFT JOIN  INV1 T3 ON T3.[BaseEntry] = T2.[DocEntry] AND T3.[BaseType] = T2.[ObjType]
LEFT JOIN OINV T4 ON T3.[DocEntry] = T4.[DocEntry] 

WHERE T0.[DocDate] >=[%0] AND  T0.[DocDate] <=[%1]

UNION ALL

SELECT DISTINCT T0.[DocNum], T0.[DocDate], T0.[CardName],NULL AS NumeroEntrega, NULL AS FechaEntrega, T4.[DocNum], T4.[DocDate]  
FROM ORDR T0
INNER JOIN  INV1 T3 ON T3.[BaseEntry] = T0.[DocEntry] AND T3.[BaseType] = T0.[ObjType]
INNER JOIN OINV T4 ON T3.[DocEntry] = T4.[DocEntry] 

WHERE T0.[DocDate] >=[%0] AND  T0.[DocDate] <=[%1]

Saludos.

2 Me gusta