Duda sobre Access

Gorobei

Miembro habitual
Mensajes
2.539
Reacciones
5.373
Aquí sigo con mis consultas ofimáticas. Me gustaría saber si en Acces es posible hacer esto mediante una consulta. Tengo la tabla de la izquierda y me gustaría convertirla en la tabla de la derecha:

Duda Access.PNG


En Stata es fácil, hay comandos específicos para eso, pero no encuentro la manera de hacerlo con Access. ¿Alguien que domine del tema?
 
Las consultas de referencias cruzadas no son exactamente lo que busco ya que Access te obliga a meter campos calculados como si fueran consultas de totales. Lo que consigo con una consulta de referencias cruzadas es esto:

Duda.jpg


Aunque podría servirme, si un mismo Id repite color, la información se pierde como en el Id 3, ya que el campo Amarillo es en realidad un campo de totales, es decir, hay que elegir entre promedio, valores máximos, mínimos, primeros, últimos, etc. (dependiendo el tipo de campo).

Seguiré investigando.
 
Finalmente conseguí solucionarlo en su momento gracias a la inestimable ayuda de un forero por privado, pero se me pasó poner la "solución". La pongo por si a alguien le pudiera ayudar. Este método lo he usado para otras consultas similares en otras bases de datos y va muy bien. Para conseguir transformar la tabla principal en la de la derecha, hay que ejecutar 4 consultas intermedias, ya que los datos de Color y Forma van apareados y no se pueden separar. Si sólo fuera una variable la que se necesitase agrupar, harían falta 3 consultas:

Primera consulta:
Insertar CODE, HTML o PHP:
SELECT A.Id, [a].[Color]+[a].[Forma] AS Antes, [b].[Color]+[b].[Forma] AS ColorForma, B.Color, B.Forma
FROM Principal AS A INNER JOIN Principal AS B ON A.Id = B.Id
WHERE ((([a].[Color]+[a].[Forma])<=[b].[Color]+[b].[Forma]));

Segunda consulta:
Insertar CODE, HTML o PHP:
SELECT Consulta1.Id, Consulta1.ColorForma, Consulta1.Color, Consulta1.Forma, Count(Consulta1.Id) AS N
FROM Consulta1
GROUP BY Consulta1.Id, Consulta1.ColorForma, Consulta1.Color, Consulta1.Forma;

Tercera consulta, agrupación de Color:
Insertar CODE, HTML o PHP:
TRANSFORM First(Consulta2.Color) AS PrimeroDeColor
SELECT Consulta2.Id
FROM Consulta2
GROUP BY Consulta2.Id
PIVOT "Color"+Format([N]);

Cuarta consulta, agrupación de Forma:
Insertar CODE, HTML o PHP:
TRANSFORM First(Consulta2.Forma) AS PrimeroDeForma
SELECT Consulta2.Id
FROM Consulta2
GROUP BY Consulta2.Id
PIVOT "Forma"+Format([N]);

Consulta final:
Insertar CODE, HTML o PHP:
SELECT Consulta3_color.Id, Consulta3_color.Color1, Consulta3_forma.Forma1, Consulta3_color.Color2, Consulta3_forma.Forma2, Consulta3_color.Color3, Consulta3_forma.Forma3
FROM Consulta3_color INNER JOIN Consulta3_forma ON Consulta3_color.Id = Consulta3_forma.Id;

Saludos
 
Arriba Pie