Mostrar registro como una columna en otra consulta Access

Tengo una Productos

Tiene el entre otros los campos

Codigo    Ruta    y Categoria

100       Graficos       Diseño

101        Imagenes     Diseño

102       Iconos           Diseño

Lo que necesito es que me filtre primero por diseño

Y luego me quede así la tabla:

100 ----------- 101 --------- 102

Graficos imagenes diseño


1 respuesta

Respuesta
2

La forma más sencilla es por medio de una consulta de referencias cruzadas, que puedes hacer sin mayor dificultad siguiendo el asistente de ese tipo de consultas.

Si tienes la tabla (me limité a los 3 campos en cuestión, pero no hay problema en que sean muchos más):

Haces la consulta de referencias cruzadas seleccionando como "encabezado de fila" el campo Categoría, como "encabezado de columna" el campo Código y como "valor" el campo ruta, y luego, una vez creada la consulta, le añades como criterio que te muestre solo los de "Diseño":

Y al ejecutarla:

Si lo que buscas es este otro resultado (no está caro por cómo has puesto el resultado que esperas):

Tan solo es cuestión de seleccionar como encabezado de columna el campo "Ruta" y como Valor el campo "Código":

Lógicamente puedes ocultar, si no lo quieres mostrar el campo "categoría", ya sea en el propio resultado de la consulta de refs. Cruzadas, o haciendo una consulta de selección sobre ella sin ese campo.

Excelente, solucionado el primer problema (nunca se me hubiera ocurrido hacerlo así)

Ahora para hacer un formulario donde esos valores cambian.

Si aplico el filtro diseño: Me da 100 101 102 las columnas

Pero si si aplico el filtro Estructuras: Me da me da 102 103 104 las columnas

Ya que el nombre del campo no va ser el código si no 100 101 102 o 102 103 104 como en mi ejemplo.

Si pongo 3 cuadros de texto como hago para que me los tome en el formulario

Si aplico el filtro diseño:

cuadro1 origen del control 100 (seria la primera Columna de mi consulta)

cuadro2 origen del control 101

cuadro3 origen del control 102

Si aplico el filtro estructuras:

cuadro1 origen del control 102 (seria la primera Columna de mi consulta)

cuadro2 origen del control 103

cuadro3 origen del control 104

Como veras es Cuadro1 siempre la primera columna de mi consulta y así para las demás cuadro2 columna2 etc

Espero sea entendible y desde ya muchas gracias como siempre por sus ayudas

Ok, a ver si esto es lo que buscas:

Abre la consulta de ref. Cruzadas en vista SQL, verás algo así:

TRANSFORM First(Tabla1.[Ruta]) AS PrimeroDeRuta
SELECT Tabla1.[Categoria]
FROM Tabla1
WHERE (((Tabla1.[Categoria])="Diseño"))
GROUP BY Tabla1.[Categoria]
PIVOT Tabla1. Codigo

Para que los "encabezados sean fijos, tienes que añadir al PIVOT esos valores, por ejemplo, si tienes los códigos 100 a 105, pondrías:

TRANSFORM First(Tabla1.[Ruta]) AS PrimeroDeRuta
SELECT Tabla1.[Categoria]
FROM Tabla1
WHERE (((Tabla1.[Categoria])="Diseño"))
GROUP BY Tabla1.[Categoria]
PIVOT Tabla1. Codigo In (100,101,102,103,104,105);

y así da igual por qué valor filtres, siempre tendrás el mismo número de columnas:

Y no deberías tener problema para hacer un formulario en que mostrar cualquier categoría

Lo probé pero no es lo que busco ( deja campos vacíos y si no esta en ese rango no lo toma) al ser 1200 códigos no funcionaria

Tal vez me exprese mal:

El ejemplo del principio es exactamente lo que necesito para tener los datos:

El problema es que cuando voy al formulario.

Osea si la primer columna 100 Toma el valor "graficos" ( es lo que ya esta logrado ) tendría que colocarlo en el campo del Cuadro de texto del form Texto01

asi para la columna 2 en texto02 del form 

Ya que otra consulta me va delvolver en la columna 1 código 1200 valor "lineales" y ese debería se mi texto01 ahora

Nota. Mi form tiene texto01 al Texto40 ( que seria el max de columnas que tiene la

Espero me entiendas no soy muy bueno explicando a veces lo que necesito y agradezco la velocidad y disposición que has tenido para ayudarme !

Pues no me queda claro del todo...

Si lo que interpreto es que a los 40 textbox le quieres asignar los campos "cambiantes" que devuelve la consulta, lo puedes hacer modificando el origen de control de cada uno de los cuadros de texto (pero ya te digo que es un chollo...), algo así:

Me.texto01.ControlSource=campo1 de la consulta

y los campos de la consulta los puedes sacar haciendo un recordset sobre ella y recorriendo la colección Fields (https://docs.microsoft.com/es-es/sql/ado/guide/data/the-fields-collection?view=sql-server-ver15)

Una solución más simple sería pasar los datos de la consulta a un tabla "temporal" o "auxiliar", con unos campos "fijos" y sobre esa tabla hacer el formulario

¡Gracias!

Efectivamente lo de la tabla auxiliar que se actualiza con los datos nuevas es la solución perfecta, tengo siempre los 40 campos con el mismo nombre y la funciones se hacen perfectas

Un millón de gracias, eso de hacer tablas auxiliares me va servir en muchas cosas ahora que lo veo bien.

Tu velocidad para contestar es admirable

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas