Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2003
Robert Robert is offline
Miembro
 
Registrado: jul 2003
Ubicación: Lima -Peru-
Posts: 25
Poder: 0
Robert Va por buen camino
Question DISTINCT con query

Hola con todos, tengo un pequeño problema con el componente query, resulta que estoy haciendo una sentencia algo asi:
SELECT DISTINCT referencia FROM CUENTA
esta sentencia solo me muestra el campo referencia, como hago para que me todos los demas campos
gracias por sus sugerencias
Responder Con Cita
  #2  
Antiguo 22-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Código:
SELECT DISTINCT * 
FROM TABLA
Código:
SELECT DISTINCT CAMPO1, CAMPO2, CAMPO3...
FROM TABLA

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 22-10-2003
Robert Robert is offline
Miembro
 
Registrado: jul 2003
Ubicación: Lima -Peru-
Posts: 25
Poder: 0
Robert Va por buen camino
Question

He probado con SELECT DISTICT * from TABLA, pero no funciona, dado que yo necesito diferenciarlos por el campo referencia, es decir agrupar los registros que tengan diferente referencia, pero de un mismo cliente

SELECT DISTINCT referencia FROM TABLA
WHERE Cliente=arametro

esta, me funciona como yo quiero, pero en el query solo se muestra el campo referencia, y cuando quiero mostrarlo en un DBGRID solo se muestra ese campo, cuando que quiero que se muestren todos los campos.
Nuevamente gracias por las sugerencias
Responder Con Cita
  #4  
Antiguo 22-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Es que esto no tendría mucho sentido: de dos registros con la misma referencia, ¿cuál sería el seleccionado?

// Saludos
Responder Con Cita
  #5  
Antiguo 22-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Si querés agrupar por un campo, entonces usá GROUP BY CAMPO.. y el resto de los campos tienen que estar afectados por una función de grupo. Y esto es mas que lógico sinó no tiene gracia el agrupamiento.

Código:
SELECT DISTINCT CAMPO1, MAX(CAMPO2) 
FROM TABLA
GROUP BY CAMPO1
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 22-10-2003
Robert Robert is offline
Miembro
 
Registrado: jul 2003
Ubicación: Lima -Peru-
Posts: 25
Poder: 0
Robert Va por buen camino
Roman, el problema no está en sí en la consulta, más bien yo diria en el componente query, mira tengo un DBGRID y un query que esta relacionado al dbgrid, a la vez este query está relacionado a una tabla (que tiene 15 campos), el problema es que en el query aparece solo el campo que pones despues de DISTINCT y los demas campos no están, por mas que uno le de Add all Fields.
Hay alguna forma de hacer que los demas campos se reflejen en el query y por lo tanto en el grid.
Responder Con Cita
  #7  
Antiguo 22-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Posteado originalmente por Robert
el problema no está en sí en la consulta, más bien yo diria en el componente query, mira tengo un DBGRID y un query que esta relacionado al dbgrid, a la vez este query está relacionado a una tabla (que tiene 15 campos), el problema es que en el query aparece solo el campo que pones despues de DISTINCT y los demas campos no están, por mas que uno le de Add all Fields.
Hay alguna forma de hacer que los demas campos se reflejen en el query y por lo tanto en el grid.
El problema está en la consulta, no en el Query. Un Query sólo te dará acceso a los campos que ennumeres en el SELECT.

// Saludos
Responder Con Cita
  #8  
Antiguo 22-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ampliando un poco:

Un Query se encarga de mandar la consulta al servidor. El servidor ejecuta exactamente lo que viene en dicha consulta de manera que sólo regresará los campos que se le hayan pedido en la cláusula SELECT. Por tanto el Query no tiene forma de conocer los valores de los otros campos, ni siquiera sabe de su existencia.

// Saludos
Responder Con Cita
  #9  
Antiguo 22-10-2003
Robert Robert is offline
Miembro
 
Registrado: jul 2003
Ubicación: Lima -Peru-
Posts: 25
Poder: 0
Robert Va por buen camino
Parece que primero debí haberte dicho que estoy trabajando en delphi 5.0 con tablas paradox, aqui hay un componente llamado query.
De acuerdo tu dices que yo ponga SELECT DISTINCT Campo1,campo2.... from TABLA, pero que sucede, si bien es cierto que aparecen en el query los campos que ponga despues del DISTINCT, esta conculta me da otro resultado del que si yo pusiera solo SELECT DISTINCT campo1. Es decir que cuando pongo SELECT DISTINCT campo1 from TABLA el resultado que me bota es el correcto(ya hice la prueba), pero cuando yo pongo SELECT DISTINCT Campo1,Campo2,Campo3........from TABLA
(ojo que tengo como 15 campos), el resultado es otro, (claro que aqui en el query aparecen todos los campos que ponga despues del DISTINCT), ademas, en este caso parece que te hace la distincion entre todos los campos que ponga despues del DISTINCT, con lo cual el resultado es otro.

Hay alguna forma en la cual ponga SELECT DISTINCT Campo1 FROM TABLA, y cuando me muestre en el DBGRID me muestre esta consulta pero con todos los campos
Responder Con Cita
  #10  
Antiguo 22-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Realmente no importa si es paradox, interbase, mysql o cualquier otro. Entra al Database Desktop y haz las consultas ahí y verás que te da los mismos resultados que has visto.

El problema aquí está en una incorrecta interpretación de lo que significa este tipo de consultas.

DISTINCT le dice al servidor:

De los registros que encuentres traeme sólo una copia de aquellos que estén repetidos.

Pero para que dos regitros se consideren repetidos deben coincidir todos sus campos (los incluídos en la consulta)

Suponte que tu tabla es algo así:

Código:
id | nombre | referencia
1  | peter  |       84
2  | paul   |       35
3  | mary   |       84
Si tu consulta es

select distinct * from tabla

los registros que encuentra son

(1, peter, 84)
(2, paul, 35)
(3, mary, 84)

Como no hay ninguno repetido te rgresa todos.

Si la consulta es

select distinct referencia from tabla

los registros encontrados son

(84)
(35)
(84)

(Así, sin más campos)

Como el primero y el tercero se repiten entonces sólo te regresa

(84)
(35)

Parece que tu quisieras que te regresara todos los campos pero sólo uno con referencia=84. Sin embarg hay dos:

(1, peter, 84)
(3, mary, 84)

¿Cómo podría el servidor saber cuál de estos dos regresar?

De cualquier forma, quizá no estemos entendiendo del todo cuál es tu propósito. Si nos ejemplificas con unos registros en concreto (tal como los de arriba, ¡sin los 15 campos!) sabremos con más detalle lo que deseas. Indica también, usando dichos ejemplos, los resultados que esperarías.

// Saludos

Última edición por roman fecha: 22-10-2003 a las 22:51:25.
Responder Con Cita
  #11  
Antiguo 22-10-2003
Robert Robert is offline
Miembro
 
Registrado: jul 2003
Ubicación: Lima -Peru-
Posts: 25
Poder: 0
Robert Va por buen camino
Estamos de acuerdo con lo que has escrito.
------------------
select distinct referencia from tabla

Parece que tu quisieras que te regresara todos los campos pero sólo uno con referencia=84. Sin embarg hay dos:

(1, peter, 84)
(3, mary, 84)
---------------------
Aqui me estas mal-interpretando, se que me va regresar los registros diferentes pero yo quisiera, que me devuelva en ese formato digamos.
(1, peter,84)
(3, mary,84)
¿Aunque por lo que he provado y lo que me has escrito no se puede?
de todos modos espero tu respuesta
Responder Con Cita
  #12  
Antiguo 22-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Posteado originalmente por Robert
Aqui me estas mal-interpretando, se que me va regresar los registros diferentes pero yo quisiera, que me devuelva en ese formato digamos.
(1, peter,84)
(3, mary,84)
Disculpa pero como te dije antes, no nos estamos entendiendo. Del ejemplo que puse, para obtener esos registros harías

select * from tabla where referencia = 84

Pero en estos momentos ya no quda claro si lo que deseas es un distinct, un where o un group. Te aconsejo que mandes un ejemplo de lo que quieres obtener. Un ejemplo en donde se vea por qué cuál sería la diferencia que mencionas.

// Saludos
Responder Con Cita
  #13  
Antiguo 23-10-2003
Robert Robert is offline
Miembro
 
Registrado: jul 2003
Ubicación: Lima -Peru-
Posts: 25
Poder: 0
Robert Va por buen camino
Ok tengo lo siguiente:

cliente factura referencia --------y mas campos
aa 1 22
bb 2 23
cc 3 24
aa 4 22
dd 5 25
bb 6 23
yo hago SELECT DISTINCT referencia FROM TABLA (ojo a toda la tabla sin una clausula where)
me bota

referencia
22
23
24
25

hay alguna forma para que me bote bote algo asi
cliente factura referencia -------y mas campos
aa 1 22
bb 2 23
cc 3 24
dd 5 25

claro que si pongo SELECT DISTINCT factura,referencia,cliente FROM TABLA , aparecen esos campos sin embargo los registros seleccionados son diferentes al caso anterior(donde tengo 4 registros), con esta nueva sentencia me aparecen los seis registros iniciales
Responder Con Cita
  #14  
Antiguo 23-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Es que este es el problema:

De estos dos registros:

aa 1 22
aa 4 22

si únicamente seleccionas el campo referencia entonces al servidor le da lo mismo cuál regresar y sóo devuelve un 22, pero si seleccionas más campos, el servidor no tiene manera de escoger cuál de los dos regresar.

Pienso que el problema aquí es de concepto, no es un problema ni con la componente Query ni con la consulta: olvidándote un momento de sql, querys e incluso programación, si a ti te dan una lista en papel como esta:

aa 1 22
bb 2 23
cc 3 24
aa 4 22
dd 5 25
bb 6 23

y te piden que entregues las filas donde no se repita la tercera columna pero que incluya todas las columnas, ¿qué harías ? ¿Cómo decides cuál de entre (aa, 1, 22) y (aa, 4, 22) enregar? ¿O entre (bb, 2, 23) y (bb, 6, 23)? ¿Al azar?

// Saludos
Responder Con Cita
  #15  
Antiguo 03-11-2003
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 22
Jose_Pérez Va por buen camino
Creo entender el problema, porque a mí me está pasando lo mismo. Y si es así, el problema no está en los campos devueltos, sino en el resultado de los registro.

Por ejemplo, supongamos que tenemos una línea de facturas con tres campos: Cliente,NumeroFactura y FechaFactura... además de otros campos.

Esta consulta:

Código:
Select distinct Cliente from Tabla Where (lo que sea)
Devuelve todos los clientes que cumplen la condición del Where.

Ahora bien, si quiero que me devuelva el mismo resultado, pero además con el resultado de los campos NumeroFactura y FechaFactura (independientemente del valore que contengan), el resultado no es el mismo (en numero de registros), y se repiten registros con el mismo número de Cliente.

Código:
Select distinct Cliente,NumeroFactura,FechaFactura from Tabla Where (lo que sea)
Lo que se busca (si realmente funcionara), sería hacer esto.

Código:
Select (distinct Cliente),NumeroFactura,FechaFactura from Tabla Where (lo que sea)
Saludos.
Responder Con Cita
  #16  
Antiguo 03-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Jose_Pérez comentó:
Lo que se busca (si realmente funcionara), sería hacer esto.

Código:
Select (distinct Cliente),NumeroFactura,FechaFactura from Tabla Where (lo que sea)
Viene siendo lo mismo. Al seleccionar únicamente al Cliente entonces tiene sentido regresar un sólo registro por cada cliente. Pero al momento de querer más datos ¿cómo sabes cuéles registros quieres? El cliente, segun la tabla que presentas, puede tener varias facturas, entonces, por cada cliente ¿cuál factura regresas?

// 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


La franja horaria es GMT +2. Ahora son las 19:41:20.


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