Hola, amigos.
Saben tengo una tabla "CLIENTES" con los campos "CLIENTE" y "CIUDAD". Lo que deseo es mostrar los clientes sin repeticiones y la ciudad con repeticiones. Para ello he utlilizado:
RS.Open "SELECT DISTINCT CLIENTE FROM CLIENTES", DBConex, adOpenStatic, adLockReadOnly
If RS.RecordCount > 0 Then
Dim list_item As ListItem
Do While Not RS.EOF
Set list_item = ListView1.ListItems.Add(, , ,)
list_item.SubItems(1) = RS!CLIENTE
list_item.SubItems(2) = RS!CIUDAD
RS.MoveNext
DoEvents
Loop
End If
RS.Close
Set RS = Nothing
Luego al cargar a un ListView me dice que el campo CIUDAD no existe. Por ello modifique la consulta y agregue "DISTINCT CLIENTES, CAMPOS". Lo malo es que no me muestra los datos que se repiten en el campo CIUDAD.
¿alguna sugerencia?
Saludos,
Pedro Jerí
si es que se supone que los registros son iguales puedes hacerlo asi ("aunque enrealidad hay muchas formas de hacerlo")
SELECT CLIENTE, MAX(CUIDAD) CIUDAD;
FROM CLIENTES;
GROUP BY CLIENTE
Que pena que estes pasando por este dilema ;)
Puedes hacerlo de la siguiente manera (Pero el resultado impreso a lo mejor no quede en el orden que lo quieres tener)
SELECT DISTINCT CLIENTE FROM CLIENTES
UNION ALL
SELECT CIUDAD FROM CLIENTES;
Los datos mostrados seria primero los clientes unicos, y abajo de estos todas las Ciudades repetidas.
LOL
^TiFa^ si no lo vueltes a decir no caigo en el error que cometi xD , lei mal el enunciado, pense que solo le importaba mostrar los clientes sin repeticiones.
EDITO: ya lo editaste :/ asi que si alguien no entiende no importa xD
Tranquilo chico :-* :-* es entendible lo que yo entiendo es que el quiere los Clientes unicos que no se repitan, y todas las Ciudades se repitan y no. Con ese UNION ALL el podria obtener esos datos, ahora el orden del mostrado bueno... ahi no lo puedo ayudar, ya que primero se imprimiran en pantalla todos los clientes unicos y debajo de estos todas las ciudades repetidas y no.
;)
acabo de hacer una consulta con lo que mencionas :/ tienes razón (porque la tienes :P ) pero (siempre hay un pero), tal y como esta, no se pueden saber las ciudades de esos clientes :/ amenos que sea
SELECT CLIENTE, MAX(CIUDAD) CIUDAD FROM CLIENTES GROUP BY CLIENTE;
UNION ALL;
SELECT CLIENTE , CIUDAD FROM CLIENTES
SELECT CLIENTE, MAX(CIUDAD) CIUDAD FROM CLIENTES GROUP BY CLIENTE;
(Suponiendo que siendo el mismo cliente, la ciudad no sea distinta :/ , igual con lo inverso)
EDITO: la verdad, como dijo ^TiFa^ antes de editarlo, curioso xD
Tuve que editar porque me explico terriblemente mal :rolleyes: pero captaste la idea de lo que decia ;)
Recuerda que la funcion MAX lo que hace es averiguar cual es el record numerico mas alto de un registro dentro de una tabla, tambien ten pendiente que el campo CIUDAD guarda datos no numericos sino de caracteres ;) por lo que te imprimira la CIUDAD en este caso que empieze con el caracter alfabetico mas aproximado a 'Z' que es el ultimo caracter del abacedario :rolleyes:
Imaginate que tengas esto
Maria Argentina
Carlos Peru
Obtendrias un resultado como el siguiente utilizando esta consulta :
SELECT CLIENTE, MAX(CIUDAD) CIUDAD FROM CLIENTES GROUP BY CLIENTE;
Maria Peru
Carlos Peru
No se la verdad a lo mejor yo interprete mal su peticion, pero lo que entiendo es que el quiere saber los clientes unicos no repetidos que posee la tabla (con la clausula DISTINCT) le basta. Y quiere saber los registros del campo Ciudades que se repiten y no se repitan en resumen todos los registros del campo CIUDAD.
Cita de: ^TiFa^ en 22 Octubre 2009, 22:52 PM
Tuve que editar porque me explico terriblemente mal :rolleyes: pero captaste la idea de lo que decia ;)
Tranquila ^TiFa^ :-* , yo no considero que te expliques mal O.o
Cita de: ^TiFa^ en 22 Octubre 2009, 22:52 PM
Imaginate que tengas esto
Maria Argentina
Carlos Peru
Obtendrias un resultado como el siguiente utilizando esta consulta :
SELECT CLIENTE, MAX(CIUDAD) CIUDAD FROM CLIENTES GROUP BY CLIENTE;
Maria Peru
Carlos Peru
Permite Discrepar ^TiFa^
lo que dices es cierto si fuera asi
Maria Argentina
Carlos Peru
Maria Peru
Pero de lo contrario no, porque si existe solo una Maria en la tabla no hay razón para que el MAX( ) de ese resultado ;)
EDITO: Igual, creo que lo utilizo mas por costumbre que por conveniencia xD , no es necesario usar un MAX() para usar el group by xD
salu2 :-*
CitarPero de lo contrario no, porque si existe solo una Maria en la tabla no hay razón para que el MAX( ) de ese resultado
Si ternura te entiendo en parte, aunque debes asumir que si el usuario que inicio el post dijo yo quiero todos aquellos clientes unicos que no se repitan, es porque de alguna manera el debe tener muchos clientes repetidos. Imaginate que yo tengo la siguiente tabla:
mysql> select * from clientes;
+---------+-----------+
| cliente | ciudad |
+---------+-----------+
| Maria | Mexico |
| Carlos | Peru |
| Luis | Africa |
| Matias | Peru |
| Ana | Argentina |
| Luis | Mexico |
| Ana | Brazil |
| Maria | Uruguay |
+---------+-----------+
8 rows in set (0.00 sec)
Como veras hay clientes repetidos en el caso de la tabla expuesta tenemos como clientes repetidos a 'Ana' y 'Maria' Como tambien puedes observar cada una de ellas esta en un pais distinto. Ahora que ocurre con esta consulta:
mysql> select cliente, max(ciudad) from clientes group by cliente;
+---------+-------------+
| cliente | max(ciudad) |
+---------+-------------+
| Ana | Brazil |
| Carlos | Peru |
| Luis | Mexico |
| Maria | Uruguay |
| Matias | Peru |
+---------+-------------+
5 rows in set (0.00 sec)
Al utilizar la funcion MAX(ciudad) estas diciendo a la consulta, devuelveme todos los registros que tengan el mayor valor (si fueran campos numericos) pero como son campos caracteres, el MAX() lo que hace es retornar todas aquellas frases que empiezen con el caracter que se aproxime mas a la letra 'Z' que es la ultima del abecedario y la cual vendria siendo la de mayor valor si fuese numerica. Por ende la consulta anterior devuelve a 'Ana' con Ciudad 'Brazil' (Ya que Ana en ciudad Argentina, recuerda que Argentina empieza por 'A' por lo cual 'Brazil' es mayor por empezar con 'B' por eso la consulta te retorna el valor de 'Ana' que le pertenece 'Brazil' y no 'Ana' que le pertenece 'Argentina' lo mismo ocurre para 'Maria' se retorna 'Maria de Uruguay' y no 'Maria de Mexico' el caracter 'U' de Uruguay esta mas cerca de la 'Z' que la 'M' de 'Mexico' ;) no se si me explico :-\ )
Prosigo, recuerda que el usuario que inicio este post dijo, yo quiero todos los Clientes unicos no repetidos (por lo cual en parte de la peticion de Clientes tu consulta estaria correcta devuelve los clientes unicos no repetidos) pero.... porque hay otro pero en el aire :) recuerda que el amigo solicito que tambien queria todas las ciudades se repitiesen o no.... entonces, si utilizamos la funcion MAX() como propones y al utilizar el GROUP BY que es una clausula que dice por cada uno, que hara tu consulta? MAX le dara prioridad a 'Maria de Brazil' pero que pasa con 'Argentina' el usuario no quiere a 'Maria Argentina' pero si quiere a 'Argentina', entonces que pasa con la ciudad 'Argentina' con la consulta usando MAX y GROUP BY???? se queda fuera, asi de simple. Sin embargo con un UNION ALL
mysql> select distinct cliente from clientes
-> union all
-> select ciudad from clientes;
+-----------+
| cliente |
+-----------+
| Maria |
| Carlos |
| Luis |
| Matias |
| Ana |
| Mexico |
| Peru |
| Africa |
| Peru |
| Argentina |
| Mexico |
| Brazil |
| Uruguay |
+-----------+
13 rows in set (0.00 sec)
De los cuales :
Clientes unicos no repetidos:
Maria |
| Carlos |
| Luis |
| Matias |
| Ana
Todas las ciudades repetidas o no:
| Mexico |
| Peru |
| Africa |
| Peru |
| Argentina |
| Mexico |
| Brazil |
| Uruguay |
De esa manera el chico obtiene los clientes unicos no repetidos, y obtiene todas las ciudades se repitan o no... lamentablemente los datos vienen juntos con el UNION ALL primero imprime los clientes unicos y debajo de estos todas las ciudades... por lo cual le dije que el debia filtrar o buscar la forma de obtener esos datos individualmente o imprimirlos asi en su Listbox.
Bueno, el caso está en que no sabemos exactamente que es lo que el chico desea y estamos acá suponiendo que es lo que quiere, yo lo que entendi, es que desea que en la consulta se muestren los clientes sin que se repitan independientemente de la ciudad (algo raro, pero es lo que entendi).
saludos!!
yo sinceramente tampoco entendi con exactitud lo que quiere TheGhost(Z) , que nos muestre lo que quiere y no s de un ejemplo, porque no podemos seguir "suponiendo".
saludos.
Yo entendi esto:
Citarmostrar los clientes sin repeticiones y la ciudad con repeticiones.
Lo malo es que no me muestra los datos que se repiten en el campo CIUDAD.
Mostrar Clientes unicos sin repeticiones y Mostrar todas las ciudades se repitan o no. Si esto es lo que el realmente quiere, me temo que el GROUP BY seria obsoleto ya que lo limitaria solo a mostrar registros unicos tanto de Clientes como Ciudad.
Cita de: ^TiFa^ en 23 Octubre 2009, 06:23 AM
me temo que el GROUP BY seria obsoleto ya que lo limitaria solo a mostrar registros unicos tanto de Clientes como Ciudad.
eso esta mas que claro, cualquiera que sabe algo de SQL saber que no puede agrupar de esa forma, esperemos entonces que nos responda el autor del post.
Supongo que si seba123neo :-* :-* :-*
Por cierto, se puede confundir la peticion del chico un pelin :rolleyes:
Rectifico, si el chico en cuestion lo que desea es los clientes unicos no repetidos y las ciudad repetidas el podria optar por lo siguiente:
SELECT DISTINCT CLIENTE FROM CLIENTES
UNION ALL
SELECT CIUDAD FROM CLIENTES HAVING COUNT(CIUDAD) > 2
Asi obtendria todos los clientes unicos no repetidos, y todas las ciudades repetidas mas de una vez ;)
Creo que la consulta seria
Select DISTINCT CLIENTE, CIUDAD From CLIENTE
Porque si se fijan si se fijan a lo que el se refiere es a los clientes que no se repiten independiente del nombre que tengan porque si tienen el mismo nombre de Maria pero una Vive Mexico y la otra en Uruguay los registros no estan repetidos porque son dos clientes diferentes totalmente porque viven en diferentes ciudades u de esa forma creeo k es lo mas logico... ;D
Citar
Porque si se fijan si se fijan a lo que el se refiere es a los clientes que no se repiten independiente del nombre que tengan porque si tienen el mismo nombre de Maria pero una Vive Mexico y la otra en Uruguay los registros no estan repetidos porque son dos clientes diferentes totalmente porque viven en diferentes ciudades u de esa forma creeo k es lo mas logico...
Si pero fijate:
CitarLo malo es que no me muestra los datos que se repiten en el campo CIUDAD.
Entonces si solo muestra Maria de Mexico, Uruguay donde queda??? el no quiere a Maria y Uruguay, pero si quiere a Uruguay y a Mexico.
uhmm ok, ubique mi error .. uhm. ..
Si pero como son de dos diferentes paises la sentencia la va a enviar como si fueran diferntes y te la va a presentar asi
+---------+-----------+
| cliente | ciudad |
+---------+-----------+
| Maria | Mexico |
| Maria | Uruguay |
+---------+-----------+
porque maria se repite pero cada ciudad es diferente pero a lo que el se refiere es que no le presenta otros nombres con la misma ciudad pero de esta forma lo muestra osea si aparece luis de Mexico lo va a mostrar sin ningun problema. :silbar:
Saludos...
Hola, perdonen que no haya entrado al post. La idea es tal y cual me ha entendido ^TiFa^.
Tengo una base de datos con 16 Mil clientes y de los cuales hay muchos repeditos. por jemplo como estos...
Cliente Ciudad
Pedro Lima
Pedro Buenos Aires
Pedro Madrid
Juan Lisboa
Miguel Lima
Miguel Madrid
Miguel Lisboa
Lo que deseo es recuperar al menos una ciudad para cada cliente único:
Pedro LIma
Juan Lisboa
Miguel LIma
Es decir, al menos recuperar una ciudad por cada cliente. he intentando con DISTINCT Clientes, pero al coger el campo Ciudad me dice que no existe. Por ello Hice DISTINCT Clientes, Ciudad. ahora no me da error pero el problema es que ya no me muestra a Miguel
Holas!
Finalmente, gracias a sus aportes, pude resolver mi problema:
Cliente Ciudad
Pedro Lima
Pedro Buenos Aires
Pedro Madrid
Juan Lisboa
Juan Santander
Miguel Lima
Miguel Madrid
Miguel Lisboa
Con este
SELECT CLIENTE, MAX(CIUDAD) AS CIUDAD FROM CLIENTES GROUP BY CLIENTE
Obtuve los siguiente...
Cliente Ciudad
Pedro Buenos Aires
Juan Lisboa
Miguel Lima
Un millon de gracias a todos.. :)
TheGhost(Z) me alegra haberte entendido desde el principio xD , y me alegra también que lo hayas solucionado con la primer respuesta que fue la mía :P
salu2
Me alegra que hayas podido resolver tu asunto, por lo visto yo entendi mal tu peticion, pensaba que eran todos los clientes unicos, y todas las ciudades se repitan o no. No sabia que querias todas las ciudades por clientes unicos.... en ese caso si sirve el GROUP BY
En realidad no lo capté al inicio, sino después de leerlo 03 veces de arriba abajo. Estaba confundido con lo de MAX(CIDUAD) xq creí que solo era para números. Luego de aclarme seguía confundido; ya que, penzaba que me hiba a mostrar la ciudad mayor de todo el campo CIUDAD. Pero por el intercambio de opiniones de ambos me di cuenta que era la ciudad mayor que el mismo cliente tenía.
Bueno, no tengo más palabras de agradecimiento..
Bueno en realidad cielo, el MAX(Ciudad) lo que hace es mostrarte la Ciudad en este caso donde el caracter de inicio de la palabra se aproxime mas a la 'Z' del alfabeto que es la ultima palabra del alfabeto.
Si tu tienes 2 Ciudades:
Argentina
Mexico
Y haces MAX(Ciudad) el te devolvera la palabra que su primer caracter se aproxime a la 'Z' en este caso 'Mexico' su primer caracter 'M' esta mas cercano a la 'Z' que la 'A' de 'Argentina' ;) Asi es como va MAX en caracteres.