Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   campos con valores repetidos (https://www.clubdelphi.com/foros/showthread.php?t=72002)

luk2009 23-01-2011 18:47:23

campos con valores repetidos
 
Cita:

numero fecha cliente evento estatus
100001 15/01/2010 0001 BA01 PENDIENTE
100002 15/01/2010 0001 BA01 PENDIENTE
100005 15/01/2010 0001 BA01 PENDIENTE
100020 15/01/2010 0001 BA01 PENDIENTE
100025 15/01/2010 0021 MA01 PENDIENTE
100028 15/01/2010 0021 MA01 PENDIENTE
100041 15/01/2010 0001 MA01 PENDIENTE

Quiero que se vea:

numero fecha cliente evento estatus
100001 15/01/2010 0001 BA01 PENDIENTE
100025 15/01/2010 0021 MA01 PENDIENTE
100041 15/01/2010 0001 MA01 PENDIENTE

Quiero filtrar por por evento + cliente y cuando estatus sea pendiente.
alguna idea?

Caral 23-01-2011 19:16:36

Hola
Código SQL [-]
Select distinct cliente, evento Form tutabla where estatus = 'PENDIENTE' group bye cliente, evento;
Saludos

Casimiro Notevi 23-01-2011 19:20:46

¿Pero ahora mismo cómo lo haces?, ¿un select?, ¿qué base de datos?

luk2009 23-01-2011 19:26:24

El problema es que si lo hago como dice caral entonces solo recibo dos campos y quiero obtener todos los campos para visualizarlos en el dbgrid.
la base de datos es firebird 2.1
Código SQL [-]
with DMmonitorenred.ZQactivas do
  begin
    Close;
    SQL.Clear;
    SQL.add('select * from  Activas inner join evento on activas.evento=evento.evento left join acmsub on activas.csid=acmsub.csid ');
    SQL.add(' where completa <> :pcompleta ');
    SQL.Add('order by alarmnum desc');
    ParamByName('pcompleta').AsString:='COMPLETADA';

pero con ella obtengo valores repetidos, quiero poder filtrarla y que solo se obtenga lo que indico en el primer mensaje

Caral 23-01-2011 19:34:02

Hola
No se:
Código SQL [-]
Select distinct cliente, evento, numero, fecha  Form tutabla where estatus = 'PENDIENTE' group bye cliente, evento, numero, fecha
El asunto esta en el group by, supongo.
Saludos

luk2009 23-01-2011 19:36:32

si pongo el campo numero que es primary key y autoincrementable, no me funciona la consulta y me muestra todos los valores repetidos.
Por otro lado queria aclarar que deseo filtrar por el evento, ya que un mismo cliente podria tener dos eventos distintos y quiero que se vean.

Caral 23-01-2011 19:39:08

Hola
El problema es que tienes varios campos que se repiten, pero otros son diferentes.
Yo trataria de usar, LAST o MIN o MAX, ademas del DISTINCT que es el que te servira.
Tuve un problema similar y recurri a LAST.
En Firebird.
Saludos

luk2009 23-01-2011 19:42:19

talvez pueda crear un campo calculado con cliente y evento y hacer el distinct en funcion de este. que piensas?

Caral 23-01-2011 19:44:09

Hola
Alguna vez he anidado dos select. pero no me hagas mucho caso:
Código SQL [-]
Select distinct cliente, evento Form tutabla 
(select * From tutabla where estatus = 'PENDIENTE')
where estatus = 'PENDIENTE' group bye cliente, evento;
Saludos

luk2009 23-01-2011 19:51:16

no es como lo pones, pero he tratado con subconsultas y no caigo con la respuesta pero voy a ponerme a leer mas sobre union y otros detalles.
la idea prodria ser anidar consultas, pero voy a investigar para ver que sale

Caral 23-01-2011 19:58:56

Hola
Solo ideas:
Digamos que tienes dos query, en el primero defines los campos iguales y en el segundo defines todo pero relacionado al query1.
Algo asi:
Código Delphi [-]
Query1.sql.text:= 'Select distinct cliente, evento Form tutabla 
where estatus = ''PENDIENTE'' group bye cliente, evento';
Query1.open;

Query2.sql.text:='select * From tutabla where cliente = '+Query1.Filebyname('cliente').Value;
Query2.open;
Por supuesto muestras en el dbgrid el resultado del query2.
Solo ideas amigo.
Saludos

luk2009 23-01-2011 20:08:01

Gracias por tu idea. La verdad es que la habia contemplado, pero la necedad de ponerlo todo en una sola consulta, no me ha permitido probarla. Dejame probar y te digo como me va.

Gracias de nuevo

coso 24-01-2011 14:45:57

Hola,
Si quieres filtrar por dos campos tan solo tienes que usar el 'and'

Código Delphi [-]

select from tabla where cliente = 1 and estatus = 'PENDIENTE'

Saludos.

luk2009 02-02-2011 00:04:51

Cita:

Empezado por coso (Mensaje 388525)
Hola,
Si quieres filtrar por dos campos tan solo tienes que usar el 'and'

Código Delphi [-] select from tabla where cliente = 1 and estatus = 'PENDIENTE'


Saludos.

Gracias por tu respuesta, pero ademas de que le falta el * despues del select o por lo menos poner los campos que quiero obtener en la consulta, creo que tambien te falta entender bien lo que deseo. Lo que quiero es agrupar los registros que tienen un mismo valor en un campo especifico y que ya se encuentran dentro de un select que busca los que tengan el valor 'Pendiente'

La verdad que la aproximacion mas cercana a la resolucion del problema es la que me ha dado caral en delphiaccess. Esta es usar un select y en la que selecciono segun el valor minimo o maximo de una cantidad X de registros con un campo con valor repetido.

Ejemplo
Código Delphi [-]
select min(alarmnun) as num, csid, estatus from tabla where estatus ='pendiente' group by csid, estatus order by csid desc

coso 02-02-2011 02:24:46

Cita:

Quiero filtrar por por evento + cliente y cuando estatus sea pendiente.
Ah, entonces entendi mal esta frase. Mil disculpas.

Caral 02-02-2011 13:39:30

Hola
Cita:

Empezado por coso (Mensaje 389602)
Ah, entonces entendi mal esta frase. Mil disculpas.

No entendiste mal amigo, en principio creo que todos entendimos lo mismo.
Lo que se nos paso por alto fue que luk2009 quería reducir la lista a solo un registro por dato y usando un filtro común no lo hacia.
Saludos

coso 02-02-2011 13:57:56

Si que lo entendi mal, pense que queria filtrar por evento, cliente y estatus.

Cita:

Quiero filtrar por por evento + cliente y cuando estatus sea pendiente
Por que dices que no lo entendi mal, Caral?

Caral 02-02-2011 14:11:25

Hola
Sera por que yo entendi lo mismo en principio ?.
Saludos

coso 02-02-2011 14:19:01

No te entiendo, no se que quieres decir

Caral 02-02-2011 14:25:30

Hola
Anem home, sé que ho entens.
Tots ens equivoquem i només tracte de fer-te sentir millor.
No crec que es necessiti filar prim.
Saludos


La franja horaria es GMT +2. Ahora son las 22:22:40.

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