cancel
Showing results for 
Search instead for 
Did you mean: 

Left Join

Former Member
0 Kudos

Buenas Tardes:

Tengo el siguiente problema:

- Realice una consulta para secar la la venta por día de la siguente forma:

SELECT distinct T0.[CreateDate] , sum(T0.[DocTotal]) 'Venta Crèdito' FROM NNM1 T1 INNER JOIN OINV T0 ON T0.Series = T1.Series WHERE T0.[CardCode] = 'BMOS' AND T1.[SeriesName] = 'bola' group by T0.[CreateDate]

Y me despliega la siguiente información:

# Fecha de creación Venta

1 03/Octubre/2008 47,243.05

2 04/Octubre/2008 45,705.00

3 06/Octubre/2008 75,192.00

4 07/Octubre/2008 26,067.00

5 08/Octubre/2008 32,027.00

6 09/Octubre/2008 33,400.00

7 10/Octubre/2008 40,832.00

8 11/Octubre/2008 38,255.00

9 13/Octubre/2008 55,220.00

10 14/Octubre/2008 28,007.00

11 15/Octubre/2008 20,079.00

NOTA:Se crearon diferentes numeraciones según el usuario para cada documento y se creo el SN BMOS para la venta al público (Factura + Pago).

- Tambien realice la siguiente consulta para las NOTAS DE CREDITO (CANCELACIONES):

SELECT T0.CREATEDATE, SUM(T0.[DocTotal]) FROM ORIN T0, NNM1 T2 WHERE T0.Series = T2.Series AND T2.[SeriesName] = 'bola' GROUP BY T0.CREATEDATE

Y me despliega:

# Fecha de creación CANCELACIONES

1 03/Octubre/2008 1,072.00

2 04/Octubre/2008 157.00

3 06/Octubre/2008 3,459.00

4 08/Octubre/2008 234.00

5 09/Octubre/2008 185.00

6 10/Octubre/2008 2,790.00

7 11/Octubre/2008 159.00

8 13/Octubre/2008 5,863.00

YO NECESITO UNIR AMBAS SENTENCIAS PARA QUE ME DIERA ALGO ASI COMO:

Fecha Ventas Cancelaciones

03/Octubre/2008 47,243.05 1,072.00

10/Octubre/2008 40,832.00

Y ASI SUCESIVAMENTE Y QUE EN DIAS QUE POR EJEMPLO NO HAYA CANCELACIONES SIMPLEMENTE SE QUEDE EL CAMPO EN NULL.

PARA POSTERIORMENTE RESTAR DICHOS CAMPOS Y SACAR LA VENTA NETA.

Estuve leyendo y según pesto debe quedar con un left join he intente la siguiente consulta:

SELECT T0.CREATEDATE, SUM(T0.[DocTotal]) 'VENTAS',SUM(T3.[DocTotal]) 'CANCELACIONES' FROM OINV T0 LEFT JOIN ORIN T3 ON T0.CREATEDATE=T3.CREATEDATE INNER JOIN NNM1 T4 ON T4.Series = T3.Series inner join NNM1 T2 on T0.Series = T2.Series WHERE T2.SERIESNAME=T4.SERIESNAME AND T0.[CardCode] = 'BMOS' AND T2.[SeriesName] = 'bola' AND T4.[SeriesName] = 'bola' GROUP BY T0.CREATEDATE ORDER BY T0.CREATEDATE

Pero me desplego información incorrecta:

Fecha de creación VENTAS CANCELACIONES

03/Octubre/2008 94,486.10 83,616.00

04/Octubre/2008 91,410.00 10,048.00

06/Octubre/2008 75,192.00 280,179.00

08/Octubre/2008 32,027.00 12,402.00

09/Octubre/2008 66,800.00 13,135.00

10/Octubre/2008 204,160.00 237,150.00

11/Octubre/2008 38,255.00 9,858.00

13/Octubre/2008 110,440.00

Para empezar las ventas me las duplico y nose porque, y los numeros que saca en las cancelaciones nada que ver. En la consulta que hice realice un espejo de la tabla NNM1 ya que el código interno de la serie del documento de ventas no es el mismo que el de las cancelaciones, ésto con el fin de igualar el nombre de la serie que es lo que tambien debo enlazar.

Realmente ya estuve viendo muchas formas de realizar la consulta pero no doy con la correcta. Espero alguien me pueda ayudar.

Muchas Gracias

Edited by: Kesia Bonilla on Oct 15, 2008 10:47 PM

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

La respuesta que obtuve es correcta y funciona correctamente

Former Member
0 Kudos

Hola,

Prueba con esto


SELECT * FROM (
SELECT distinct T0.CreateDate , sum(T0.DocTotal) 'Venta Crèdito' ,0  as Cancelaciones FROM NNM1 T1  INNER JOIN OINV T0 ON T0.Series = T1.Series WHERE T0.CardCode = 'BMOS' AND  T1.SeriesName  = 'bola'  group by  T0.CreateDate

union all

SELECT T0.CREATEDATE, 0,SUM(T0.DocTotal) FROM ORIN T0, NNM1 T2 WHERE T0.Series = T2.Series AND T2.SeriesName  = 'bola' GROUP BY T0.CREATEDATE
) AS T88

att,

Manuel Lazcano

Humberto_Neira
Product and Topic Expert
Product and Topic Expert
0 Kudos

Estimados,

Para estos casos, lo que sugiero es que veas el armar un STORE PROCEDURE usando tablas temporales bajo la sgte estructura:

paso #1:

Crear tabla temporal #TABLA_TEMPORAL

( fecha

monto1

monto2 )

paso #2:

hacer un insert #TABLA (SELECT from "query #1" de tu caso)

En este punto tendras algo como :

fechas --> montos --> NULL

paso #3:

Insert into #TABLA(select from query #2 de tu caso pero con una validación para que solo se inserten los registros de fechas que no estén previamente cargados. usar NOT IN o NOT EXIST). Esta validación es necesaria pues podrias tener fechas de tu QUERY #2 que no aparecieron en tu query #1 y que deben ser INSERTADAS en la tabla.

paso #4.

hacer un UPDATE sobre #TABLA en el campo MONTO_2, con la query #2 pero para las fechas que existen en #tabla, es decir que tienen MONTO_1 y que con este UPDATE cargas el dato del MONTO_2.

paso #5.

Select * from #TABLA

resultado:

tendras tu tabla de N columnas para las fechas.

Espero captes la forma de programar este caso usando Store Procedures

saludos