** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Hacer SELECT DISTINCT en 2 columnas de un List Box
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoHacer SELECT DISTINCT en 2 columnas de un List Box

 Responder Responder
Autor
Mensaje
Jose35 Ver desplegable
Habitual
Habitual


Unido: 05/Noviembre/2017
Localización: Aljaraque
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Tema: Hacer SELECT DISTINCT en 2 columnas de un List Box
    Enviado: 15/Noviembre/2017 a las 18:58
Buenas, estoy intentando hacer SELECT DISTINCT en un list box con 2 columnas y no me lo hace

Os doy datos:

la Tabla se llama "Provision"
Los campos Implicados son "Orden_Atlas","Ubicacion","Tipo_Orden_Portico"

En dicha tabla hay cerca de 850 registros, puede haber hasta 9 registros con el mismo dato en el campo llamado "Orden_Atlas" , con Ubicaciones diferentes o algunas repetidas en el campo llamado "Ubicacion" y con el mismo dato en el campo "Tipo_Orden_Portico"

Ahora os copio la linea que uso para intentarlo

Me.LstAltas.RowSource = "SELECT DISTINCT Orden_Atlas, Ubicacion FROM Provision  WHERE [Tipo_Orden_Portico] LIKE'*Alta*' ORDER BY [Provision].[Orden_Atlas]"

En la Columna 1 del list Box me ofrece un listado de Ordenes Atlas y en la columna 2 me ofrece un listado de ubicaciones, repitiendome ordenes atlas (de esta forma me salen 100 registros).

Ejemplo similar a lo que me sale------------

17011234567   HV.ON
17011234567   HV.ON CD05
17011234567   HV.ON026
17011234567   HV.ON
17049876543   BCON. A02
17019876543   BCON.
17019996666   HV.TA
17023334445   HV.ON

--------------------------------------





Si elimino el campo Ubicaciones y escribo la siguiente linea:

Me.LstAltas.RowSource = "SELECT DISTINCT Orden_Atlas FROM Provision  WHERE [Tipo_Orden_Portico] LIKE'*Alta*' ORDER BY [Provision].[Orden_Atlas]"

Me funciona correctamente y me da las 42 Ordenes diferentes que hay

Ejemplo similar a lo que me sale
--------------------------------
17011234567  
17049876543  
17019996666  
17023334445 
17046656594
17031521236
--------------------------------------



Pero yo necesito sacar en el list box las 2 columnas, en la 1 columna la Orden_Atlas y en la segunda columna la Ubicacion asociada a uno de los registros cualquiera con esa orden atlas, no a todos los registros que hay con esa orden.

Saludos y Gracias








Editado por Jose35 - 15/Noviembre/2017 a las 19:55
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 12019
Enlace directo a este mensaje Enviado: 15/Noviembre/2017 a las 23:46
Prueba convirtiendo la consulta en una de agrupación dónde el campo Orden_Atlas es "Agrupar por" y el campo Ubicacion es "Primero" 

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Jose35 Ver desplegable
Habitual
Habitual


Unido: 05/Noviembre/2017
Localización: Aljaraque
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 00:02
No sé cómo se hace eso, me lo podrías explicar?

Gracias
Arriba
Jose35 Ver desplegable
Habitual
Habitual


Unido: 05/Noviembre/2017
Localización: Aljaraque
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 00:07
Perdón, no te había comprendido, te refieres a esto:

Me.Lstaltas.RowSource = "SELECT Orden_Atlas, Ubicacion FROM Provision  WHERE [Tipo_Orden_Portico] LIKE'*Alta*' GROUP BY Ubicacion, Orden_Atlas ORDER BY [Provision].[Orden_Atlas]"

salen 100 altas y repite los campos de Orden_Atlas
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 12019
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 00:14
En la vista diseño, debajo de Orden_Atlas, aparece "Agrupar por". Debajo de Ubicacion, ¿que aparece? Para mi debería aparecer "Primero".

La SQL debería quedar, más o menos así:

Me.Lstaltas.RowSource = "SELECT Orden_Atlas, First(Ubicacion) AS FirstUbicacion FROM Provision  WHERE [Tipo_Orden_Portico] LIKE'*Alta*' GROUP BY Ubicacion, Orden_Atlas ORDER BY [Provision].[Orden_Atlas]"
Xavi, un minyó de Terrassa

Mi web
Arriba
Jose35 Ver desplegable
Habitual
Habitual


Unido: 05/Noviembre/2017
Localización: Aljaraque
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 08:17
Gracias Xavi, pero no funciona, he añadido la línea que me has indicado y siguen saliendo 100, repitiendo las Ordenes Atlas al igual que antes.
Arriba
Jose35 Ver desplegable
Habitual
Habitual


Unido: 05/Noviembre/2017
Localización: Aljaraque
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 08:23
De todas formas no entiendo esto que me dices:

En la vista diseño, debajo de Orden_Atlas, aparece "Agrupar por". Debajo de Ubicacion, ¿que aparece? Para mi debería aparecer "Primero".

Donde lo encuentro, pues si pongo Vista Diseño en el formulario, no veo esto que me dices

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 12019
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 10:17
Sigue estos pasos (intentaré no dejarme ninguno)
1. Abre una nueva consulta
2. Cuando te pida tablas, cancela
3. Ponte en vista SQL
4. Pega tu SQL actual: SELECT DISTINCT Orden_Atlas, Ubicacion FROM Provision  WHERE [Tipo_Orden_Portico] LIKE'*Alta*' ORDER BY [Provision].[Orden_Atlas]
5. Ponte en modo diseño
6. En el Ribbon, en la pestaña diseño, encontrarás un botón Agrupar (la E griega de suma)
7. Ahora te apareceran eso de "Agrupar por" y entenderás mi mensaje.
8. Juega con la consulta hasta que consigas los resultados esperados.
9. Cuando los tengas, te pones en vista SQL y copias la sentencia
10. Vas a tu punto del código dónde realizas la asignación del RowSource y cambias la SQL por la que has generado.

A ver si ahora si...
Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Jose35 Ver desplegable
Habitual
Habitual


Unido: 05/Noviembre/2017
Localización: Aljaraque
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 12:06
Buenas Xavi y Gracias por responder, hago lo que tu me dices y en vista SQL me sale esto:

SELECT DISTINCT Provision.Orden_Atlas, First(Provision.Ubicacion) AS PrimeroDeUbicacion
FROM Provision
GROUP BY Provision.Orden_Atlas, Provision.[Tipo_Orden_Portico]
HAVING (((Provision.[Tipo_Orden_Portico]) Like '*Alta*'))
ORDER BY Provision.Orden_Atlas;

Es mas compruebo que funciona, pues si veo la vista Hoja de Datos me sale una única orden con una única actuación, hasta ahí todo bien, pero si copio y lo pego en mi RowSource, me queda asi y no funciona

Me.Lstaltas = "SELECT DISTINCT Provision.Orden_Atlas, First(Provision.Ubicacion) AS PrimeroDeUbicacion FROM Provision GROUP BY Provision.Orden_Atlas, Provision.[Tipo_Orden_Portico] HAVING (((Provision.[Tipo_Orden_Portico]) Like '*Alta*')) ORDER BY Provision.Orden_Atlas"

Que falla?, yo no consigo ver el problema.

Saludos, del miniyo de Huelva, jaja, los compañeros del curro me llaman asi.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 12019
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 12:16
Me.Lstaltas.RowSource
Xavi, un minyó de Terrassa

Mi web
Arriba
Jose35 Ver desplegable
Habitual
Habitual


Unido: 05/Noviembre/2017
Localización: Aljaraque
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 12:21
aaaaaahhhhh, fallo mas tonto de los tontos.

!!! F U N C I O N A !!!

Gracias Xavi
Arriba
Jose35 Ver desplegable
Habitual
Habitual


Unido: 05/Noviembre/2017
Localización: Aljaraque
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 16/Noviembre/2017 a las 13:23
Al final he decidido ordenar en vez de por Orden_Atlas por el campo Ubicaciones, me funciona perfectamente y me ha quedado así la línea:

Me.Lstaltas.RowSource = "SELECT DISTINCT Provision.Orden_Atlas, First(Provision.Ubicacion) AS PrimeroDeUbicacion FROM Provision GROUP BY Provision.Orden_Atlas, Provision.[Tipo_Orden_Portico] HAVING (((Provision.[Tipo_Orden_Portico]) Like '*Alta*')) ORDER BY First(Provision.Ubicacion)"


Copio la línea por si le puede valer a alguien y cierro el tema dándote las Gracias por todo Xavi.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable