O.T. Consulta SQL - Resultado inesperado

O.T. Consulta SQL - Resultado inesperado

Postby MarioG » Mon Dec 21, 2015 1:52 am

Hola Estimados
Realizo la consulta sobre DBFs con servidor ADS
Para entender la consulta explico las bases involucradas

A.BDSGC03 - base de Ventas
D.BDSGC04 - base de Detalles de Ventas se aplica en Sum()
B.BDSGC18 - base de Clientes
C.BDSGC33 - base de Ramos de Venta

consulta SQL
Code: Select all  Expand view
ADSExecuteSQLDirect( "SELECT A.FFEVTA01,A.FDOCINT1,A.FCABFA04,SUM(D.FDETFA06*D.FDETFA08) AS MontoVta,SUM(D.FDETFA06*D.FDETFA07) AS Costo," + ;
                            "SUM(D.FDETFA11) AS Ganancia,(SUM(D.FDETFA06*D.FDETFA08)/SUM(D.FDETFA06*D.FDETFA07)-1)*100 AS Porc,SUM(D.FDETFA06) AS TotalKg," + ;
                            "B.FIDCLI01,B.FRAMO01,C.FRAMO01,C.FRAMO02 "+ ;
                     "FROM BDSGC03 AS A INNER JOIN BDSGC04 AS D ON A.FDOCINT1=D.FDOCINT1, BDSGC18 AS B, BDSGC33 AS C " + ;
                     "WHERE A.FFEVTA01 BETWEEN '"+hDatos["Desde"]+"' AND '"+hDatos["Hasta"]+"' " + ;
                           "AND A.FIDCLI01=B.FIDCLI01 AND D.FUNI01='KG' AND B.FRAMO01=C.FRAMO01 " + ;   // AND A.FIDCLI01=B.FIDCLI01
                     "GROUP BY A.FFEVTA01,A.FDOCINT1,A.FCABFA04,A.FCABFA12,A.FCABFA14,A.FCABFA15,A.FCABFA18,A.FCABFA24,A.FCABFA31," + ;
                              "B.FIDCLI01,B.FRAMO01,C.FRAMO01,C.FRAMO02 " + ;
                     "HAVING FCABFA18 AND NOT FCABFA24 " + ;
                     "ORDER BY C.FRAMO02,A.FFEVTA01,A.FCABFA04" )
 

En WHERE se indica las fechas inicio-fin, la igualdad entre cod de cliente en Ventas - Cliente, FUNI01, que solo liste Kilos y la igualdad entre cod Ramos en Venta y Ramos
En HAVING que la Venta se haya facturado (FCABFA18) y que no este Anulada (FCABFA24)
El problema es que repite algunas lineas; pero... lo peor es que modificando fechas el resultado no es el mismo!

Entre 01/11 y 30/11 (repite al cliente Eduardo...)
Image
Entre 15/11 y 30/11 (repite al cliente Catering, que esta antes de Eduardo, que ahora no repite)
Image
Entre 18/11 y 20/11 (NO repite fila)
Image

alguna idea del porque?, gracias
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: O.T. Consulta SQL - Resultado inesperado

Postby xmanuel » Mon Dec 21, 2015 9:51 am

Sin entrar en pormenores usa el:
SELECT DISTINCT ...
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: O.T. Consulta SQL - Resultado inesperado

Postby MarioG » Mon Dec 21, 2015 10:28 am

Manu;
haré pruebas, gracias

(fe de erratas) :wink:
Image
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: O.T. Consulta SQL - Resultado inesperado

Postby MarioG » Tue Dec 22, 2015 11:01 am

Manu;
"el que sabe... sabe"

muchas gracias
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: O.T. Consulta SQL - Resultado inesperado (SOLUCIONADO)

Postby MarioG » Tue Dec 22, 2015 11:03 am

MarioG wrote:Hola Estimados
Realizo la consulta sobre DBFs con servidor ADS
Para entender la consulta explico las bases involucradas

A.BDSGC03 - base de Ventas
D.BDSGC04 - base de Detalles de Ventas se aplica en Sum()
B.BDSGC18 - base de Clientes
C.BDSGC33 - base de Ramos de Venta

consulta SQL
Code: Select all  Expand view
ADSExecuteSQLDirect( "SELECT A.FFEVTA01,A.FDOCINT1,A.FCABFA04,SUM(D.FDETFA06*D.FDETFA08) AS MontoVta,SUM(D.FDETFA06*D.FDETFA07) AS Costo," + ;
                            "SUM(D.FDETFA11) AS Ganancia,(SUM(D.FDETFA06*D.FDETFA08)/SUM(D.FDETFA06*D.FDETFA07)-1)*100 AS Porc,SUM(D.FDETFA06) AS TotalKg," + ;
                            "B.FIDCLI01,B.FRAMO01,C.FRAMO01,C.FRAMO02 "+ ;
                     "FROM BDSGC03 AS A INNER JOIN BDSGC04 AS D ON A.FDOCINT1=D.FDOCINT1, BDSGC18 AS B, BDSGC33 AS C " + ;
                     "WHERE A.FFEVTA01 BETWEEN '"+hDatos["Desde"]+"' AND '"+hDatos["Hasta"]+"' " + ;
                           "AND A.FIDCLI01=B.FIDCLI01 AND D.FUNI01='KG' AND B.FRAMO01=C.FRAMO01 " + ;   // AND A.FIDCLI01=B.FIDCLI01
                     "GROUP BY A.FFEVTA01,A.FDOCINT1,A.FCABFA04,A.FCABFA12,A.FCABFA14,A.FCABFA15,A.FCABFA18,A.FCABFA24,A.FCABFA31," + ;
                              "B.FIDCLI01,B.FRAMO01,C.FRAMO01,C.FRAMO02 " + ;
                     "HAVING FCABFA18 AND NOT FCABFA24 " + ;
                     "ORDER BY C.FRAMO02,A.FFEVTA01,A.FCABFA04" )
 

En WHERE se indica las fechas inicio-fin, la igualdad entre cod de cliente en Ventas - Cliente, FUNI01, que solo liste Kilos y la igualdad entre cod Ramos en Venta y Ramos
En HAVING que la Venta se haya facturado (FCABFA18) y que no este Anulada (FCABFA24)
El problema es que repite algunas lineas; pero... lo peor es que modificando fechas el resultado no es el mismo!

Entre 01/11 y 30/11 (repite al cliente Eduardo...)
Image
Entre 15/11 y 30/11 (repite al cliente Catering, que esta antes de Eduardo, que ahora no repite)
Image
Entre 18/11 y 20/11 (NO repite fila)
Image

alguna idea del porque?, gracias
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: O.T. Consulta SQL - Resultado inesperado

Postby Carlos Mora » Fri Dec 25, 2015 6:27 pm

Mario,
es dificil responderte porque los nombres de campo no ayudan a adivinar que estas haciendo.
Si se te repiten registros, es porque la clave del group se debe estar repitiendo, por lo que habría que ver si en

GROUP BY A.FFEVTA01,A.FDOCINT1,A.FCABFA04,A.FCABFA12,A.FCABFA14,A.FCABFA15,A.FCABFA18,A.FCABFA24,A.FCABFA31," + ;
"B.FIDCLI01,B.FRAMO01,C.FRAMO01,C.FRAMO02

tienes algo que se repita, por ejemplo el RAMO o algo así. EL JOIN esta generando la duplicacion, por lo que yo pond´ria todos los campos del join como columnas para ver que es lo que se duplica.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: O.T. Consulta SQL - Resultado inesperado

Postby MarioG » Tue Dec 29, 2015 11:53 pm

Carlos;
mucha gracias por la respuesta
Para aprender voy a seguir tu consejo. No obstante rehice usando DISTINCT, como sugirió Manuel, y ya no hubo repetecion

FELIZ 2016!!
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 63 guests