Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-05-2021
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Consulta MYSQL Resultados inconsistente

Que tal amigos del club, hoy recurro a ustedes ya que se me partio la cabeza con un reporte el cual tengo 3 opciones de sacarlo
1) general (Suma las Ventas de Rest y Fruteria)
2) Solo Restaurant (Aqui tengo los numeros de grupos definidos son 23)
3) Solo Fruteria. (Aqui le digo que me de las ventas diferentes a los otros 23)
El Sistema usa 6 series y se identifican con el 1 digito del documento y debo ignorar una serie paso a mostrar como lo hago
Uso MySql, componentes de conexion MyDAC lo cual tengo 3 query los cuales en la propiedad sql les coloque la consulta con parametros de la siguiente manera

sqgeneral
Código SQL [-]
SELECT 
opermv.documento,
left (opermv.documento,1) as nserie,
opermv.grupo,
opermv.nombre,
opermv.preciounit,
opermv.cantidad,
opermv.cntdevuelt,
opermv.cntdevuelt * opermv.preciounit as totaldev,
opermv.fechadoc,
opermv.montoneto,
operti_diferencial.factorcambiario,
(opermv.cntdevuelt * opermv.preciounit) / operti_diferencial.factorcambiario as devcambio,
opermv.montoneto / operti_diferencial.factorcambiario as totcambio
from 
opermv
INNER JOIN operti_diferencial ON (opermv.documento = operti_diferencial.documento)
WHERE opermv.fechadoc BETWEEN :fecha1 and :fecha2 and 
      left (opermv.documento,1) <> :nroserie

sqrestaurant
Código SQL [-]
opermv.documento,
left (opermv.documento,1) as nserie,
opermv.grupo,
opermv.nombre,
opermv.preciounit,
opermv.cantidad,
opermv.cntdevuelt,
opermv.cntdevuelt * opermv.preciounit as totaldev,
opermv.fechadoc,
opermv.montoneto,
operti_diferencial.factorcambiario,
(opermv.cntdevuelt * opermv.preciounit) / operti_diferencial.factorcambiario as devcambio,
opermv.montoneto / operti_diferencial.factorcambiario as totcambio
from 
opermv
INNER JOIN operti_diferencial ON (opermv.documento = operti_diferencial.documento)
WHERE opermv.grupo = :grupo1 or
      opermv.grupo = :grupo2 or
      opermv.grupo = :grupo3 or
      opermv.grupo = :grupo4 or
      opermv.grupo = :grupo5 or
      opermv.grupo = :grupo6 or
      opermv.grupo = :grupo7 or
      opermv.grupo = :grupo8 or
      opermv.grupo = :grupo9 or
      opermv.grupo = :grupo10 or
      opermv.grupo = :grupo11 or
      opermv.grupo = :grupo12 or
      opermv.grupo = :grupo13 or
      opermv.grupo = :grupo14 or
      opermv.grupo = :grupo15 or
      opermv.grupo = :grupo16 or
      opermv.grupo = :grupo17 or
      opermv.grupo = :grupo18 or
      opermv.grupo = :grupo19 or
      opermv.grupo = :grupo20 or
      opermv.grupo = :grupo21 or
      opermv.grupo = :grupo22 or
      opermv.grupo = :grupo23 and
opermv.fechadoc BETWEEN :fecha1 and :fecha2 and 
      left (opermv.documento,1) <> :nroserie

sqfruteria
Código SQL [-]
SELECT 
opermv.documento,
left (opermv.documento,1) as nserie,
opermv.grupo,
opermv.nombre,
opermv.preciounit,
opermv.cantidad,
opermv.cntdevuelt,
opermv.cntdevuelt * opermv.preciounit as totaldev,
opermv.fechadoc,
opermv.montoneto,
operti_diferencial.factorcambiario,
(opermv.cntdevuelt * opermv.preciounit) / operti_diferencial.factorcambiario as devcambio,
opermv.montoneto / operti_diferencial.factorcambiario as totcambio
from 
opermv
INNER JOIN operti_diferencial ON (opermv.documento = operti_diferencial.documento)
WHERE opermv.grupo <> :grupo1 or
      opermv.grupo <> :grupo2 or
      opermv.grupo <> :grupo3 or
      opermv.grupo <> :grupo4 or
      opermv.grupo <> :grupo5 or
      opermv.grupo <> :grupo6 or
      opermv.grupo <> :grupo7 or
      opermv.grupo <> :grupo8 or
      opermv.grupo <> :grupo9 or
      opermv.grupo <> :grupo10 or
      opermv.grupo <> :grupo11 or
      opermv.grupo <> :grupo12 or
      opermv.grupo <> :grupo13 or
      opermv.grupo <> :grupo14 or
      opermv.grupo <> :grupo15 or
      opermv.grupo <> :grupo16 or
      opermv.grupo <> :grupo17 or
      opermv.grupo <> :grupo18 or
      opermv.grupo <> :grupo19 or
      opermv.grupo <> :grupo20 or
      opermv.grupo <> :grupo21 or
      opermv.grupo <> :grupo22 or
      opermv.grupo <> :grupo23 and
opermv.fechadoc BETWEEN :fecha1 and :fecha2 and 
      left (opermv.documento,1) <> :nroserie

en el boton imprimir tengo el siguiente codigo
Código Delphi [-]
case rgserie.ItemIndex of
            0: begin
                with sqgeneral do
                begin
                 ParamByName('fecha1').AsDate:= Trunc(dtfecha1.Date);
                 ParamByName('fecha2').AsDate:= Trunc(dtfecha2.Date);
                 ParamByName('nroserie').AsString:=UnitVariables.serie_consumo;
                 ExecSQL;
                    totventas:=0;
                    totventas_us:=0;
                    totdev:=0;
                    totdev_us:=0;
                    sqgeneral.First;
                    while not sqgeneral.Eof do
                     begin
                       totventas:=totventas + sqgeneral.FieldByName('montoneto').AsCurrency;
                       totventas_us:=totventas_us + sqgeneral.FieldByName('totcambio').AsCurrency;
                       totdev:=totdev + sqgeneral.FieldByName('totaldev').AsCurrency;
                       totdev_us:=totdev_us + sqgeneral.FieldByName('devcambio').AsCurrency;

                       sqgeneral.Next;
                     end;

                end;
                    case rgimpresion.ItemIndex of
                    0: begin
                        if  sqgeneral.IsEmpty then
                        begin
                         MessageDlg('No hay Datos Que Mostrar', mtWarning, [mbOK], 0);
                        end
                        else
                        begin
                          resumen.Variables.variables['finicio']:=Trunc(dtfecha1.Date);
                          resumen.Variables.variables['ffinal']:=dtfecha2.Date;
                          resumen.Variables.variables['ventas']:=totventas;
                          resumen.Variables.variables['ventasus']:=totventas_us;
                          resumen.Variables.variables['devoluciones']:=totdev;
                          resumen.Variables.variables['devolucionesus']:=totdev_us;
                          resumen.Variables.variables['empresa']:=UnitVariables.empresa;
                           resumen.Variables.variables['titulo']:='GENERAL';

                          resumen.ShowReport;
                        end;
                       //
                    end;
                    1: begin
                       MessageDlg('Esta Opcion esta en Desarrollo', mtWarning, [mbOK], 0);

                    end;

                    end;
            end;

            1: begin
                grupo1:='1002';
                grupo2:='1003';
                grupo3:='1004';
                grupo4:='1005';
                grupo5:='1006';
                grupo6:='1007';
                grupo7:='1008';
                grupo8:='1009';
                grupo9:='1010';
                grupo10:='1011';
                grupo11:='1012';
                grupo12:='1013';
                grupo13:='1014';
                grupo14:='1015';
                grupo15:='1016';
                grupo16:='1017';
                grupo17:='1018';
                grupo18:='1019';
                grupo19:='1020';
                grupo20:='1021';
                grupo21:='1022';
                grupo22:='1023';
                grupo23:='1001';

                with sqrestaurant do
                begin
                 ParamByName('fecha1').AsDate:= Trunc(dtfecha1.Date);
                 ParamByName('fecha2').AsDate:= Trunc(dtfecha2.Date);
                 ParamByName('nroserie').AsString:=UnitVariables.serie_consumo;
                 ParamByName('grupo1').AsString:=grupo1;
                 ParamByName('grupo2').AsString:=grupo2;
                 ParamByName('grupo3').AsString:=grupo3;
                 ParamByName('grupo4').AsString:=grupo4;
                 ParamByName('grupo5').AsString:=grupo5;
                 ParamByName('grupo6').AsString:=grupo6;
                 ParamByName('grupo7').AsString:=grupo7;
                 ParamByName('grupo8').AsString:=grupo8;
                 ParamByName('grupo9').AsString:=grupo9;
                 ParamByName('grupo10').AsString:=grupo10;
                 ParamByName('grupo11').AsString:=grupo11;
                 ParamByName('grupo12').AsString:=grupo12;
                 ParamByName('grupo13').AsString:=grupo13;
                 ParamByName('grupo14').AsString:=grupo14;
                 ParamByName('grupo15').AsString:=grupo15;
                 ParamByName('grupo16').AsString:=grupo16;
                 ParamByName('grupo17').AsString:=grupo17;
                 ParamByName('grupo18').AsString:=grupo18;
                 ParamByName('grupo19').AsString:=grupo19;
                 ParamByName('grupo20').AsString:=grupo20;
                 ParamByName('grupo21').AsString:=grupo21;
                 ParamByName('grupo22').AsString:=grupo22;
                 ParamByName('grupo23').AsString:=grupo23;
                ExecSQL;
                    totventas:=0;
                    totventas_us:=0;
                    totdev:=0;
                    totdev_us:=0;
                    sqrestaurant.First;
                    while not sqrestaurant.Eof do
                     begin
                       totventas:=totventas + sqrestaurant.FieldByName('montoneto').AsCurrency;
                       totventas_us:=totventas_us + sqrestaurant.FieldByName('totcambio').AsCurrency;
                       totdev:=totdev + sqrestaurant.FieldByName('totaldev').AsCurrency;
                       totdev_us:=totdev_us + sqrestaurant.FieldByName('devcambio').AsCurrency;
                       sqrestaurant.Next;
                     end;

                end;
                    case rgimpresion.ItemIndex of
                    0: begin
                        if  sqrestaurant.IsEmpty then
                        begin
                         MessageDlg('No hay Datos Que Mostrar', mtWarning, [mbOK], 0);
                        end
                        else
                        begin
                          resumen.Variables.variables['finicio']:=Trunc(dtfecha1.Date);
                          resumen.Variables.variables['ffinal']:=dtfecha2.Date;
                          resumen.Variables.variables['ventas']:=totventas;
                          resumen.Variables.variables['ventasus']:=totventas_us;
                          resumen.Variables.variables['devoluciones']:=totdev;
                          resumen.Variables.variables['devolucionesus']:=totdev_us;
                          resumen.Variables.variables['empresa']:=UnitVariables.empresa;
                          resumen.Variables.variables['titulo']:='RESTAURANT';
                          resumen.ShowReport;
                        end;
                       //
                    end;
                    1: begin
                       MessageDlg('Esta Opcion esta en Desarrollo', mtWarning, [mbOK], 0);

                    end;

                    end;
            end;
            2: begin
                grupo1:='1002';
                grupo2:='1003';
                grupo3:='1004';
                grupo4:='1005';
                grupo5:='1006';
                grupo6:='1007';
                grupo7:='1008';
                grupo8:='1009';
                grupo9:='1010';
                grupo10:='1011';
                grupo11:='1012';
                grupo12:='1013';
                grupo13:='1014';
                grupo14:='1015';
                grupo15:='1016';
                grupo16:='1017';
                grupo17:='1018';
                grupo18:='1019';
                grupo19:='1020';
                grupo20:='1021';
                grupo21:='1022';
                grupo22:='1023';
                grupo23:='1001';

                with sqpisodeventa do
                begin
                 ParamByName('fecha1').AsDate:= Trunc(dtfecha1.Date);
                 ParamByName('fecha2').AsDate:= Trunc(dtfecha2.Date);
                 ParamByName('nroserie').AsString:=UnitVariables.serie_consumo;
                 ParamByName('grupo1').AsString:=grupo1;
                 ParamByName('grupo2').AsString:=grupo2;
                 ParamByName('grupo3').AsString:=grupo3;
                 ParamByName('grupo4').AsString:=grupo4;
                 ParamByName('grupo5').AsString:=grupo5;
                 ParamByName('grupo6').AsString:=grupo6;
                 ParamByName('grupo7').AsString:=grupo7;
                 ParamByName('grupo8').AsString:=grupo8;
                 ParamByName('grupo9').AsString:=grupo9;
                 ParamByName('grupo10').AsString:=grupo10;
                 ParamByName('grupo11').AsString:=grupo11;
                 ParamByName('grupo12').AsString:=grupo12;
                 ParamByName('grupo13').AsString:=grupo13;
                 ParamByName('grupo14').AsString:=grupo14;
                 ParamByName('grupo15').AsString:=grupo15;
                 ParamByName('grupo16').AsString:=grupo16;
                 ParamByName('grupo17').AsString:=grupo17;
                 ParamByName('grupo18').AsString:=grupo18;
                 ParamByName('grupo19').AsString:=grupo19;
                 ParamByName('grupo20').AsString:=grupo20;
                 ParamByName('grupo21').AsString:=grupo21;
                 ParamByName('grupo22').AsString:=grupo22;
                 ParamByName('grupo23').AsString:=grupo23;

                ExecSQL;
                    totventas:=0;
                    totventas_us:=0;
                    totdev:=0;
                    totdev_us:=0;
                    sqpisodeventa.First;
                    while not sqpisodeventa.Eof do
                     begin
                       totventas:=totventas + sqpisodeventa.FieldByName('montoneto').AsCurrency;
                       totventas_us:=totventas_us + sqpisodeventa.FieldByName('totcambio').AsCurrency;
                       totdev:=totdev + sqpisodeventa.FieldByName('totaldev').AsCurrency;
                       totdev_us:=totdev_us + sqpisodeventa.FieldByName('devcambio').AsCurrency;

                       sqpisodeventa.Next;
                     end;

                end;
                    case rgimpresion.ItemIndex of
                    0: begin
                        if  sqpisodeventa.IsEmpty then
                        begin
                         MessageDlg('No hay Datos Que Mostrar', mtWarning, [mbOK], 0);
                        end
                        else
                        begin
                          resumen.Variables.variables['finicio']:=Trunc(dtfecha1.Date);
                          resumen.Variables.variables['ffinal']:=dtfecha2.Date;
                          resumen.Variables.variables['ventas']:=totventas;
                          resumen.Variables.variables['ventasus']:=totventas_us;
                          resumen.Variables.variables['devoluciones']:=totdev;
                          resumen.Variables.variables['devolucionesus']:=totdev_us;
                          resumen.Variables.variables['empresa']:=UnitVariables.empresa;
                          resumen.ShowReport;
                        end;
                       //
                    end;
                    1: begin
                       MessageDlg('Esta Opcion esta en Desarrollo', mtWarning, [mbOK], 0);

                    end;

                    end;
            end;
            end;
Responder Con Cita
  #2  
Antiguo 06-05-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
https://www.clubdelphi.com/foros/showthread.php?t=93348
Responder Con Cita
  #3  
Antiguo 07-05-2021
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
hola a todos:

Cita:
Empezado por Casimiro Notevi Ver Mensaje
+1

A parte de no indicar el problema exacto que tienes en tu consulta SQL mezclas los AND y OR sin paréntesis, por lo que el filtrado quizás no sea exactamente como esperas, prueba de la siguiente forma tanto para la consulta con "=" y la de "<>"
Código SQL [-]
 WHERE     opermv.fechadoc BETWEEN :fecha1 AND :fecha2
       AND left(opermv.documento, 1) <> :nroserie
       AND (   opermv.grupo <> :grupo1
            OR opermv.grupo <> :grupo2
            OR opermv.grupo <> :grupo3
            OR opermv.grupo <> :grupo4
            OR opermv.grupo <> :grupo5
            OR opermv.grupo <> :grupo6
            OR opermv.grupo <> :grupo7
            OR opermv.grupo <> :grupo8
            OR opermv.grupo <> :grupo9
            OR opermv.grupo <> :grupo10
            OR opermv.grupo <> :grupo11
            OR opermv.grupo <> :grupo12
            OR opermv.grupo <> :grupo13
            OR opermv.grupo <> :grupo14
            OR opermv.grupo <> :grupo15
            OR opermv.grupo <> :grupo16
            OR opermv.grupo <> :grupo17
            OR opermv.grupo <> :grupo18
            OR opermv.grupo <> :grupo19
            OR opermv.grupo <> :grupo20
            OR opermv.grupo <> :grupo21
            OR opermv.grupo <> :grupo22
            OR opermv.grupo <> :grupo23)

y para simplificar bastante el uso de tantos parámetros te recomiendo que utilices el comando FIND_IN_SET de mySQL de tal forma que ese where podrías simplificarlo mucho.

Ejemplo para cuando quieres que coincida con la lista de grupos:
Código SQL [-]
 WHERE     opermv.fechadoc BETWEEN :fecha1 AND :fecha2
       AND left(opermv.documento, 1) <> :nroserie
       AND  FIND_IN_SET(opermv.grupo, :listGrupos)

y de esta forma para cuando no quieres que coincida con la lista de grupos
Código SQL [-]
 WHERE     opermv.fechadoc BETWEEN :fecha1 AND :fecha2
       AND left(opermv.documento, 1) <> :nroserie
       AND NOT  FIND_IN_SET(opermv.grupo, :listGrupos)

y desde delphi la lista de grupos la pasas simplemente a un único parámetro como lista separada por comas:

Código Delphi [-]
   ParamByName('listGrupos').AsString:='1002,1003,...,1001';
Responder Con Cita
  #4  
Antiguo 07-05-2021
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Gracias estimado, o de los parentecis lo habia visto ayer, lo de FIND_IN_SET lo desconocia gracias ya voy a corregirlo saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tratar los resultados de una consulta sql. botones67 SQL 10 17-03-2011 19:24:03
Llamar a un stored procedure de mysql y recuperar resultados tksko Conexión con bases de datos 4 05-11-2008 16:26:24
Consulta con resultados erroneos Alexander Conexión con bases de datos 1 29-08-2006 03:58:36
Reconocer si la consulta no dio resultados La__X SQL 1 28-04-2006 21:15:03
Consulta sin resultados!!!! Giniromero Conexión con bases de datos 8 03-10-2003 13:17:41


La franja horaria es GMT +2. Ahora son las 07:54:38.


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