Convertir filas por columnas en un SQL Query

6 08 2007

Por un trabajo de la U, me toco hacer un sistema de encuestas, por lo que los datos los metia en una BD, de forma que insertaba toda la respuesta en un String, el problema radica que si queria ver los datos se me regresaban asi:

id respuesta ipaddress
7 Saprissa 127.0.0.1
8 Heredia 127.0.0.1
9 Alajuela 127.0.0.1
10 Cartago 127.0.0.1
11 Saprissa 127.0.0.1
12 Saprissa 127.0.0.1

Ahora bien esos datos estan bien, hay varias formas de mostrar esos datos, el asunto es que esos mismo datos debían ser usados para hacer gráficos y lo gráficos solo entienden numeros en lugar de strings y también usa las columnas como referencia de los datos y las filas como parte de la estadística, para que los datos se mostraran en números hago un query que me cuente los datos repetidos y me los agrupe en solo uno y otra columna agrego las respuestas de esta manera

SELECT respuesta,count(respuesta) AS total FROM pregunta1 GROUP BY respuesta

Devuelve los datos asi:

respuesta total
Saprissa 3
Heredia 1
Alajuela 1
Cartago 1

La forma más facil para convertir esos datos en una columnas, es hacer select anidados (solo lo he probado con SQL Server) de esta forma:

SELECT
(SELECT COUNT(respuesta) FROM pregunta1 WHERE respuesta = 'Alajuela') as 'Alajuela',
(SELECT COUNT(respuesta) FROM pregunta1 WHERE respuesta = 'Cartago') as 'Cartago',
(SELECT COUNT(respuesta) FROM pregunta1 WHERE respuesta = 'Heredia') as 'Heredia',
(SELECT COUNT(respuesta) FROM pregunta1 WHERE respuesta = 'Saprissa') as 'Saprissa'

Devuelve como resultado:

Alajuela Cartago Heredia Saprissa
1 1 1 3

Voy a explicar este query primero que todo el hago el select pasado pero sin la columna respuesta, y le pongo como filtro la respuesta con el nombre exacto o si se query con like, y a todo eso nombramos la columna del nombre descriptivo de los datos devueltos, con mayor simplesa lo que esta dentro del parétesis seria el dato y lo que esta a la derecha del parentesis es el nombre de la columna, un aspecto importante es la coma al final de subquery que es un delimitador para hacer más subquery.

Es secillo al fin y al cabo es otra forma de ver los datos 😛 .

Anuncios

Acciones

Information

6 responses

6 11 2008
hashukki

hola
necesito algo como esto que pones aqui , pero mi problema es que no puedo poner los datos hardcodeados como pones tu, es decir where respuesta = ‘Alajuela’

yo tendría que hacer algo como select respuesta as miRespuesta y luego where respuesta = miRespuesta pero no me funciona.
Alguna idea?
Gracias

7 11 2008
£ÐУЯ

Si es de una aplicacion es nada mas de suplantarlo de por la variable y si es desde el SQL directo puedes probar poner un select anidado.

saludos

14 11 2008
alex

puedes usar los operadores PIVOT y UNPIVOT
solo en sql server 2005

visita esta pagina

http://www.mug.org.ar/SQL/ArticSQL/1803.aspx

3 02 2010
Carlos

Hola:

Quisiera lo mismo pero para informix por favor ayudame..

7 06 2010
Lalo

Al parecer no funciona en sqlplus, lo probe y me sale el siguiente error

alguien tiene idea de como hacerlo en sqlplus??

6 05 2014
walvig

deseo que me salga lo siguiente:

DatosA
Nombres – Mes – Dia
=================
Juan – 01 – 05/01/2014
Pedro – 01 – 07/01/2014
Carlos – 02 – 09/01/2014
Carlos – 02 – 09/02/2014
Juan – 02 – 05/02/2014
Carlos – 03 – 09/03/2014
Juan – 03 – 05/03/2014
Pedro – 03 – 07/03/2014

y la Consulta:que deseo es

Nombres – 01 – 02 – 03
==========================================
Juan – 05/01/2014 – 05/02/2014 – 05/02/2014
Pedro – 07/01/2014 – – 07/03/2014
Carlos – 09/01/2014 – 05/01/2014 – 05/01/2014

Gracias…..

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: