Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Valores totales de DISTINC (https://www.clubdelphi.com/foros/showthread.php?t=69544)

thelibmx 25-08-2010 01:22:05

Valores totales de DISTINC
 
Hola tengo dos dudas con distinc y delphi, trabajo con delphi2010,BD(DBF), con ADOConnection1, ADODataSet1, DataSource1, ADOQuery1, DBGrid1 y mi
tabla es algo mas o menos asi:

Código:

                      campo1_|_ campo2 _|campo3 | campo4  |  campo5
      registro1|    1      |    1        |  1      |  0          | 1
      registro2|    2      |    2        |  1      |  1          | 2
      registro3|    3      |    1        |  2      |  3          | 2
      registro4|    3      |    3        |  2      |  4          | 5
      registro5|    5      |    3        |  2      |  2          | 6
      registro6|    4      |    3        |  1      |  1          | 6

bien si yo hago esto


Código Delphi [-]
...
...
 form1.ADOQuery1.sql.add('SELECT  distinc campo1 from tabla1'); 
 form1.ADOQuery1.execsql;
 form1.ADOQuery1.Active:=true;
..
obtengo algo asi en un dbgrid


Código SQL [-]
|campo1|                                                            |campo2|
1                                                                            1
2                      si fuera el campo 2 seria asi.. etc          2
3                                                                            3
4
5

esto solo es por un campo (aqui parte de mi segunda duda que la planteare mas adelante)

Mi pregunta es, como hago para saber el total de los valores diferentes que distinc encuentra, y si es posible como puedo agregarlos al grid para que quede algo similar a esto

Código SQL [-]
 
|campo1| valores |          
    1              1                                                                
    2              1     
    3              2                                                           
    4              1 
    5              1

donde campo es el numero arrojado por distinc y "valores" es el numero total de ocurrencias que hay por cada tipo diferente que encuentra distinc...

Y la otra duda o pregunta mas bien es si es posible utilizar distinc con diferentes campos a la ves, digamos que mi consulta seria algo asi..
Código SQL [-]

SELECT  distinc campo1,campo2,campo3,campo4 from tabla1  

o asi

SELECT  (distinc campo1,campo2,campo3,campo4) from tabla1  o

o asi

SELECT  distinc (campo1),distinc (campo2),distinc (campo3),distinc (campo4) from tabla1
pregunto por que de cualquiera de esas formas me manda un error de sintaxis, o comillas perdidas y por mas que he movido no encuentro la forma

el resultado que esperaria en el grid seria algo mas o menos asi

Código SQL [-]

                    campo1_|_ campo2 _|campo3 | campo4  | 
                  |     1      |     1         |  1       |  0          | 
                  |     2      |     2         |  2       |  1          | 
                  |     3      |     3         |           |  2          | 
                  |     4      |                |          |  3          |  
                  |     5      |                |          |  4          |  
                  |             |               |           |             |



Si se preguntan por que asi, es para saber el numero de ocurrencias que hay por cada campo, uso un dbgrid por que es lo que se me ocurrio pero si hubieran otros componentes o alguna otra manera que me pudiera servir pues es bienvenida...

si no me supe explicar bien por favor diganmelo para tratar de explicar mas...

por su atencion gracias

ContraVeneno 25-08-2010 01:56:47

Código SQL [-]
Select Campo1, Count(Campo1)
From TuTabla
Group By Campo1

thelibmx 25-08-2010 17:57:34

Cita:

Empezado por ContraVeneno (Mensaje 374392)
Código SQL [-]Select Campo1, Count(Campo1) From TuTabla Group By Campo1

MUCHAS GRACIAS !! ContraVeneno es lo que queria.

ahora si quisiera obtener los valores individualmente para asiganarlos a una variable por ejemplo algo asi

Código:

|campo1| valores |         
    1              1                                                               
    2              1   
    3              2                                                         
    4              1
    5              1campo1.valor1=1;
campo1.valor2=1;
campo1.valor3=2;
campo1.valor4=1;
campo1.valor5=1;

¿Tendria que hacer la consulta de uno por uno o se podria dentro del mismo query, por ejemplo cuando hace distinc encuentra 1 y despues cuenta cuantos hay de 1, en ese lapso asignar el valor del numero de ocurrencias, y luego con el otro valor poder obtenerlo y asi con los demas valores?.


y mi ultima consulta (espero) con ese codigo que me diste lo hace por un solo campo que en este caso es campo1, si quisiera que fuera lo mismo pero para todos los campos de la tabla es posible hacer algo similar a esto

Código SQL [-]
 select *, count * from tabla group by *

o tendria que hacer todo campo por campo metiendolo en algun ciclo :confused:

Gracias por tu ayuda y la paciencia :)

ContraVeneno 25-08-2010 18:10:12

Cita:

Empezado por thelibmx (Mensaje 374492)
...ahora si quisiera obtener los valores individualmente para asiganarlos a una variable...
¿Tendria que hacer la consulta de uno por uno o se podria dentro del mismo query...

No habría necesidad de ponerlos en variables, ya que los valores ya se encuentran en el query. Por ejemplo con la consulta:
Código SQL [-]
Select Campo1, Count(Campo1) as Suma
From TuTablaGroup By Campo1

Puedes buscar los valores utilizando "Locate":
Código Delphi [-]
with TuQuery do begin
 If Locate('Campo1', 5, [ioPartialKey]) then begin
   showmessage('Esta es la suma para el valor 5: ' + FieldByName('Suma').AsString);
 end; //If
end; //with


Cita:

Empezado por thelibmx (Mensaje 374492)
...es posible hacer algo similar a esto select *, count * from tabla group by *

o tendria que hacer todo campo por campo metiendolo en algun ciclo :confused:

No, eso no te funcionaría.
Habría que ver lo que realmente quieres para ver como se tendría que hacer, pero esa consulta no te funcionaría.

thelibmx 25-08-2010 19:02:35

Cita:

Empezado por ContraVeneno (Mensaje 374495)
Habría que ver lo que realmente quieres para ver como se tendría que hacer, pero esa consulta no te funcionaría.


Ok intentare explicar un poco mas, me apoyare de esta imagen

http://www.imaxenes.com/imagen/ejemp...9h.jpg.html###

mi tabla es como la fig.1 pero con mas campos digamos pueden ser 15 como 300 o mas pueden tener nombre similar o diferente, y registros pues desde 200 hasta 3000 +/-, con el codigo que tu me has enseñado he logrado llegar a la fig.2, mi pregunta es habra manera de hacer algo similar como en la figura 2 pero que me muestre todos los campos para que quede como en la fig.3, pero con todo los campos de la tabla? ...

se que es muy dificil mostrarlo al grid, de hecho no se si es posible, por eso pregunto mucho, me dedico hacer analisis y revisiones y se que hay programas que ya estan diseñados para esto, pero por el momento no estan a mi alcance poderlos adquirir, entonces como dicen "hagalo usted mismo" :p, o tal ves no necesariamente que se mostraran en un grid, creo que esto es solo la punta del iceberg no? :confused:

thelibmx 26-08-2010 19:20:20

Cita:

Empezado por ContraVeneno (Mensaje 374495)
Código SQL [-]Select Campo1, Count(Campo1) as Suma From TuTablaGroup By Campo1

Código Delphi [-]


una ultima pregunta ContraVeneno si de esa consulta quisiera obtener solo los valores que se repiten mas de una ves como seria ¿?

con lo que he visto de aqui, quise intentar algo asi pero pues no corre por que seguramente esta mal utilizado

Código SQL [-]
Select Campo1, Count(Campo1) as Suma
From TuTabla where count(campo1)>1 Group By Campo1

se supone que distinc Indica que queremos seleccionar sólo los valores distintos. yo busco la funcion contraria no se si exista, que muestre solo los valores iguales?

digamos que quisiera obtener solo los valores que se repiten de un campo, con datos que deben ser unicos,por ejemplo en un campo clave, saber si un valor se repite de una coleccion de datos. no se si me explique bien... :confused:

thelibmx 26-08-2010 19:52:14

quise editar el mensaje anterior para no poner tantos mensajes pero ya no me dejo por que se supone que el administrador solo me permite editar el mensaje 25 minutos despues de haber posteado,(en teoria tenia 15 minutos cuando lo intente editar:mad:) en fin

aca intente esto otro pero me manda error
Código SQL [-]
('Select '+duplicado.text+', Count('+duplicado.text+')as casos, (Count('+duplicado.text+')/100) as Porcentaje   from '+Nom_tab.Text+' Group By '+duplicado.text+'  Having ('+duplicado.text+'>1) ' );
ese es mi query real pero me marca EoleException 'Operador/operand type mistmach' supongo que alguna comilla o no reconoce el mayor que ">"

:confused:
seguire probando..
Gracias

ContraVeneno 26-08-2010 23:05:28

Código SQL [-]
Select Campo1, Count(Campo1) as Suma 
From TuTabla 
Group By Campo1
Having Count(Campo1) > 1

thelibmx 26-08-2010 23:54:02

Cita:

Empezado por ContraVeneno (Mensaje 374706)
Código SQL [-]Select Campo1, Count(Campo1) as Suma From TuTabla Group By Campo1 Having Count(Campo1) > 1

Maestro de maestros!!
muchas gracias ContraVeneno
con esto ya complete mi trabajo al 95% :D
+10


La franja horaria es GMT +2. Ahora son las 00:45:20.

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