Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Otro sql que no sale (https://www.clubdelphi.com/foros/showthread.php?t=17412)

ctronx 07-01-2005 18:56:20

Otro sql que no sale
 
Saludos, tengo dos tablas con los mismo campos

tabla: ventasr
vendedor
fecha
total

tabla:ventasf
vendedor
fecha
total

necesito obtener el siguiente listado:
ejemplo:
Vendedor Fecha TotalR TotalF
1 01/01/05 3500 4100
2 02/01/05 0 350
3 03/01/05 5200 0

Los ceros del ejemplo los puse porque se puede dar el caso que un vendedor tenga ventas en la tabla "ventasr" pero no en la tabla "ventasf" y al reves.
Espero me puedan ayudar, de antemano muchas gracias.

Oxa78 07-01-2005 19:10:35

Saludos :

Es importante que indiques con q motor de Base de Datos trabajas, pero te asistire con una sentencia que podria aplicarse en SQL Server 2000, DB2 y talves en Oracle.

En primer lugar, deberías partir de la tabla de vendedores para obtener el resultado q quieres :

tabla: ventasr
vendedor (Codigo de vendedor)
fecha
total

tabla:ventasf
vendedor (Codigo de vendedor)
fecha
total

tabla : vendedor
vendedor (codigo de vendedor)
vend_nombre

tonces :
Código SQL [-]
  SELECT W.VENDEDOR, MAX(W.VEND_NOMBRE) VEND_NOMBRE,
  W.FECHA, SUM(W.TOTALR) TOTALR, SUM(W.TOTALF) TOTALF
  FROM (
    SELECT A.VENDEDOR, MAX(A.VEND_NOMBRE) VEND_NOMBRE,
    B.FECHA, SUM(TOTAL) TOTALR, 0 TOTALF
    FROM VENTASR A
    LEFT JOIN VENTASR B ON (B.VENDEDOR=A.VENDEDOR)  
    GROUP BY A.VENDEDOR, B.FECHA  
    UNION 
    SELECT A.VENDEDOR, MAX(A.VEND_NOMBRE) VEND_NOMBRE,
    B.FECHA, 0 TOTALR, SUM(TOTAL) TOTALF
    FROM VENTASF A
    LEFT JOIN VENTASF B ON (B.VENDEDOR=A.VENDEDOR)
    GROUP BY A.VENDEDOR, B.FECHA
  ) W
  GROUP BY  W.VENDEDOR, W.FECHA
Espero q sirva...

ctronx 07-01-2005 23:07:04

Gracias, Utilizo Mysql, voy a probar tu sugerencia haber como me sale.

ctronx 07-01-2005 23:51:13

No me sale me da un error de sintaxis.

Oxa78 08-01-2005 00:18:39

Q pena nunca trabaje con MySQL, seguramente no soporta la instruccion,
lo que se por ejemplo es q esta instrucción no corre en InterBase OpenSource.

Lo que puedes hacer es correr esta instrucción en un ClientDataSet :

Código SQL [-]
    SELECT A.VENDEDOR, MAX(A.VEND_NOMBRE) VEND_NOMBRE,
    B.FECHA, SUM(TOTAL) TOTALR, 0 TOTALF
    FROM VENTASR A
    LEFT JOIN VENTASR B ON (B.VENDEDOR=A.VENDEDOR)  
    GROUP BY A.VENDEDOR, B.FECHA  
    UNION 
    SELECT A.VENDEDOR, MAX(A.VEND_NOMBRE) VEND_NOMBRE,
    B.FECHA, 0 TOTALR, SUM(TOTAL) TOTALF
    FROM VENTASF A
    LEFT JOIN VENTASF B ON (B.VENDEDOR=A.VENDEDOR)
    GROUP BY A.VENDEDOR, B.FECHA

Luego Ejecutas esta instrucción SQL vacia en otro ClientDataSet :

Código SQL [-]
    SELECT ''       '' VENDEDOR, 
    ''                                                  '' VEND_NOMBRE,
    NULL FECHA, 0.00 TOTALR, 0.00 TOTALF
    FROM VENTASR A
    WHERE A.VENDEDOR=''ABCDSR''

El VENDEDOR=''ABCDSR'' No existe la idea es tener un ClientDataSet vacio, pero con la estructura necesaria para llenar los datos.

Finalmente recorres el primer ClientDataSet a traves de código de Delphi, es decir en un While recorres los registros y vas totalizando segun tus condiciones. Esta operación te demandara mas pero massss trabajo, que una simple instrucción. Que pena...

Espero que puedas realizarlo, parece que es el unico camino si es que tu motor SQL no soporta la instrucción.

PD: En la isntruccion anterior habia un error no tenia "FROM", pero ya esta corregido.

ctronx 08-01-2005 02:30:36

Me sigue marcando error, voy a probar poniendo menos campos de la siguiente manera:

tabla:ventasR
fecha
total

tabla.ventasF
fecha
total

ejemplo del resultado que quiero:

Código Delphi [-]
fecha               totalR        totalF
01/01/05          2500            0
02/01/05            0             3600
03/01/05           652             0

Espero me puedas o me puedan ayudar sugiriendome algun codigo sql que necesito, de antemano gracias. (utilizo mysql).

Tony_G 09-01-2005 20:50:47

Hola.

Creo que tu problema se puede resolver de la siguiente forma:

1º Te creas una tabla 'tablax' con la siguiente estructura:
- vendedor
- fecha
- totalf
- totalr

2º Haces las siguientes consultas:

INSERT INTO tablax SELECT vendedor,fecha,0 AS totalf,totalr FROM ventasr;

INSERT INTO tablax SELECT vendedor,fecha,totalf,0 AS totalr FROM ventasf;

SELECT vendedor,fecha,SUM(totalf),SUM(totalr) FROM tablax GROUP BY vendedor,fecha;

Si lo que quieres es hacerlo todo en una sola sentencia --> no sé si se puede hacer, pero en el caso de que se pudiera tendrías que evaluar la rapidez.

Espero que te sirva.

Saludos.

Oxa78 10-01-2005 15:03:22

Saludos : La solución de Tony__G parece ser la mas adecuada, crear una tabla temporal (TablaX) es la solucion.


La franja horaria es GMT +2. Ahora son las 10:59:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi