Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2005
ctronx ctronx is offline
Miembro
 
Registrado: jun 2004
Posts: 214
Poder: 20
ctronx Va por buen camino
Unhappy 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.
Responder Con Cita
  #2  
Antiguo 07-01-2005
Oxa78 Oxa78 is offline
Miembro
 
Registrado: may 2003
Ubicación: Lima - Peru
Posts: 110
Poder: 22
Oxa78 Va por buen camino
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...
__________________
Joseph Buttgembach Verde
Lima - Perú

Última edición por Oxa78 fecha: 08-01-2005 a las 00:19:35. Razón: Poner etiquetas SQL
Responder Con Cita
  #3  
Antiguo 07-01-2005
ctronx ctronx is offline
Miembro
 
Registrado: jun 2004
Posts: 214
Poder: 20
ctronx Va por buen camino
Gracias, Utilizo Mysql, voy a probar tu sugerencia haber como me sale.
Responder Con Cita
  #4  
Antiguo 07-01-2005
ctronx ctronx is offline
Miembro
 
Registrado: jun 2004
Posts: 214
Poder: 20
ctronx Va por buen camino
Unhappy

No me sale me da un error de sintaxis.
Responder Con Cita
  #5  
Antiguo 08-01-2005
Oxa78 Oxa78 is offline
Miembro
 
Registrado: may 2003
Ubicación: Lima - Peru
Posts: 110
Poder: 22
Oxa78 Va por buen camino
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.
__________________
Joseph Buttgembach Verde
Lima - Perú

Última edición por Oxa78 fecha: 08-01-2005 a las 00:23:14.
Responder Con Cita
  #6  
Antiguo 08-01-2005
ctronx ctronx is offline
Miembro
 
Registrado: jun 2004
Posts: 214
Poder: 20
ctronx Va por buen camino
Unhappy

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).
Responder Con Cita
  #7  
Antiguo 09-01-2005
Tony_G Tony_G is offline
Miembro
 
Registrado: may 2003
Ubicación: Córdoba - España
Posts: 40
Poder: 0
Tony_G Va por buen camino
Question

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.
__________________
TonyG
Responder Con Cita
  #8  
Antiguo 10-01-2005
Oxa78 Oxa78 is offline
Miembro
 
Registrado: may 2003
Ubicación: Lima - Peru
Posts: 110
Poder: 22
Oxa78 Va por buen camino
Saludos : La solución de Tony__G parece ser la mas adecuada, crear una tabla temporal (TablaX) es la solucion.
__________________
Joseph Buttgembach Verde
Lima - Perú
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:42:39.


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