Tengo una tabla (en MySQL) con 3 columnas:
Location Category Supplier
A Computers Company X
A Printers Company Y
B Computers Company X
B Printers Company Y
B Software Company Y
C Computers Company Y
C Software Company Z
Ahora necesito hacer una matriz que contenga la información anterior, así:
Computers Printers Software
A Company X Company Y
B Company X Company Y Company Y
C Company Y Company Z
Eventualmente necesito tener esto en Excel.
En realidad, tengo un número variable de categorías, por lo que hacerlo en MySQL con una combinación para cada columna no es una buena opción. Podría escribir una función en PHP, pero me preguntaba si hay una solución más elegante.
Busqué tablas dinámicas en Excel, pero parecen solo adecuadas para números como valores. Pero tal vez estoy pasando por alto algo, ya que nunca trabajo con Excel.
microsoft-excel
pivot-table
sql
Dylan
fuente
fuente
Respuestas:
No sé si esto es tan "elegante" como esperaba, pero está en el camino correcto con la idea de la tabla dinámica. Solo tienes que hacer trampa un poco. Una "columna auxiliar", una tabla dinámica y la función "vlookup" pueden ser sus amigos aquí.
Primero, a los datos originales, agregue una columna auxiliar para un "Número de proveedor". Empresa X = 1, Empresa Y = 2, Empresa Z = 3. Puse la columna auxiliar como la primera columna, para un uso fácil más adelante en un vlookup. Tenga en cuenta que los datos ahora están en las celdas A5: D11.
A continuación, gire los datos de esta manera. Utilicé la opción "diseño clásico de tabla dinámica" en la pestaña "Pantalla" del cuadro de diálogo "Opciones de tabla dinámica" (haga clic con el botón derecho en la tabla dinámica para abrir ese cuadro de diálogo).
Seleccione y copie toda la tabla dinámica, luego "pegue valores / especiales" en otra ubicación al lado de la tabla dinámica original. Luego, en el cuerpo de la copia de la tabla, ingrese la fórmula que se muestra. Tenga en cuenta que la fórmula vlookup se refiere a la tabla dinámica original (la referencia "H7" - vea el diagrama anterior) y también al rango A5: D11 mencionado anteriormente.
Como dije, no es elegante, pero funciona. ¡Hay muchas personas inteligentes que navegan por este sitio que probablemente encontrarán una solución "elegante" para usted!
fuente
Me di cuenta de que puedes evitar la tabla dinámica por completo. Vea la captura de pantalla a continuación. Usa una columna auxiliar. Defina los rangos nombrados que se muestran. Configure su diseño como en G14: J18. En el cuerpo de la tabla, use BUSCARV con un SUMPRODUCT.
fuente