O.T. Consulta SQL - Resultado inesperado

Post Reply
User avatar
MarioG
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR
Been thanked: 2 times

O.T. Consulta SQL - Resultado inesperado

Post by MarioG »

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

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
xmanuel
Posts: 768
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Been thanked: 5 times
Contact:

Re: O.T. Consulta SQL - Resultado inesperado

Post by xmanuel »

Sin entrar en pormenores usa el:
SELECT DISTINCT ...
______________________________________________________________________________
Sevilla - Andalucía
User avatar
MarioG
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR
Been thanked: 2 times

Re: O.T. Consulta SQL - Resultado inesperado

Post by MarioG »

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
Been thanked: 2 times

Re: O.T. Consulta SQL - Resultado inesperado

Post by MarioG »

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
Been thanked: 2 times

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

Post by MarioG »

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

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
Carlos Mora
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: O.T. Consulta SQL - Resultado inesperado

Post by Carlos Mora »

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"
User avatar
MarioG
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR
Been thanked: 2 times

Re: O.T. Consulta SQL - Resultado inesperado

Post by MarioG »

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
Post Reply