Tengo datos en una tabla mysql en formato largo/alto (descrito a continuación) y deseo convertirlo a formato ancho. ¿Puedo hacer esto usando solo sql?Mysql, remodele los datos de largo/alto a ancho
Lo más fácil de explicar con un ejemplo. Suponga que tiene información sobre (país, clave, valor) para los países M, N claves (por ejemplo, claves pueden ser los ingresos, líder político, área, continente, etc.)
Long format has 3 columns: country, key, value
- M*N rows.
e.g.
'USA', 'President', 'Obama'
...
'USA', 'Currency', 'Dollar'
Wide format has N=16 columns: county, key1, ..., keyN
- M rows
example:
country, President, ... , Currency
'USA', 'Obama', ... , 'Dollar'
¿Hay alguna manera en SQL para crear una nueva tabla con los datos en el formato ancho?
select distinct key from table;
// esto me conseguirá todas las llaves.
1) ¿Cómo puedo crear la tabla utilizando estos elementos clave?
2) ¿Cómo llego a los valores de la tabla?
Estoy bastante seguro de que puedo hacer esto con cualquier lenguaje de scripting (me gusta Python), pero quería saber si hay una manera fácil de hacerlo en mysql. Muchos paquetes estadísticos como R y STATA tienen este comando incorporado porque se usa con frecuencia.
======
Para ser más claro, aquí está la salida de entrada deseada para un caso sencillo:
de entrada:
country attrName attrValue key (these are column names)
US President Obama 2
US Currency Dollar 3
China President Hu 4
China Currency Yuan 5
salida
country President Currency newPkey
US Obama Dollar 1
China Hu Yuan 2
Mi forma de trabajar. Tu camino es mucho mejor. TE AMO o gracias. Haga su elección sobre cuál prefiere para expresar su agradecimiento. – chongman
El operador IF es propietario de MySQL. Use CASE en su lugar para cumplir con SQL estándar. Más detalles aquí: [SQLite long to wide formats?] (Http://www.stackoverflow.com/questions/2444708/sqlite-long-to-wide-formats) – SuperAce99
@mluebke: su enlace está muerto :( –