Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problemas con Querys

Estas en el tema de Problemas con Querys en el foro de Mysql en Foros del Web. [B]Hola !! Tengo la siguiente query : Select usuario , (case when categoria=7 then 'CATEGORIA 7' when categoria=8 then ' CATEGORIA 8' when categoria=9 then ...
  #1 (permalink)  
Antiguo 01/06/2011, 10:43
 
Fecha de Ingreso: junio-2011
Mensajes: 1
Antigüedad: 12 años, 10 meses
Puntos: 0
Exclamación Problemas con Querys

[B]Hola !!

Tengo la siguiente query :
Select usuario ,
(case when categoria=7 then 'CATEGORIA 7'
when categoria=8 then ' CATEGORIA 8'
when categoria=9 then ' CATEGORIA 9' end)
from tabla
where servicio = 1
order by 1


Lo que obtengo es algo asi:

++++++++++++++++++++
+COLUMNA1 + COLUMNA2 +
++++++++++++++++++++
+ usuario1 + CATEGORIA 7 +
+ usuario1 + CATEGORIA 9 +
+ usuario2 + CATEGORIA 9 +
+ usuario3 + CATEGORIA 7 +
+ usuario3 + CATEGORIA 8 +
+ usuario3 + CATEGORIA 9 +
++++++++++++++++++++


tengo la siguiente query tambien:
select usuario ,
(case when categoria=7 then 'X' end) 'CATEGORIA 7',
(case when categoria=8 then 'X' end) 'CATEGORIA 8',
(case when categoria=9 then 'X' end) 'CATEGORIA 9'
from tabla
where servicio = 1
order by 1


Y lo que obtengo es algo asi :

++++++++++++++++++++++++++++++++++++++++
+ COLUMNA1 + CATEGORIA 7 + CATEGORIA 8 + CATEGORIA 9 +
++++++++++++++++++++++++++++++++++++++++
+ usuario1 + X + NULL + NULL +
+ usuario1 + NULL + NULL + X +
+ usuario2 + NULL + NULL + X +
+ usuario3 + X + NULL + NULL +
+ usuario3 + NULL + X + NULL +
+ usuario3 + NULL + NULL + X +
++++++++++++++++++++++++++++++++++++++++



PERO LO QUE NECESITO ES ALGO ASI :



++++++++++++++++++++++++++++++++++++++
+COLUMNA1 + COLUMNA2 +
++++++++++++++++++++++++++++++++++++++
+ usuario1 + CATEGORIA 7 CATEGORIA 9 +
+ usuario2 + CATEGORIA 9 +
+ usuario3 + CATEGORIA 7 CATEGORIA 8 CATEGORIA 9 +
++++++++++++++++++++++++++++++++++++++

O

++++++++++++++++++++++++++++++++++++++++
+ COLUMNA1 + CATEGORIA 7 + CATEGORIA 8 + CATEGORIA 9 +
++++++++++++++++++++++++++++++++++++++++
+ usuario1 + X + NULL + X +
+ usuario2 + NULL + NULL + X +
+ usuario3 + X + X + X +
++++++++++++++++++++++++++++++++++++++++




Es posible lograrlo sin funciones ?
  #2 (permalink)  
Antiguo 01/06/2011, 11:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problemas con Querys

Lo que quieres hacer no se puede lograr en MySQL con consultas. En todo caso esa tabla resultado es algo que debes completar de armar en la aplicación donde visualices la información.
SQL Server cuenta, si, con cláusulas para invertir una tabla (es esa la operación que buscas, mas o menos), pero no MySQL.

Por favor, trata de escribir con texto normal. Cuando pones esos colores, resaltados y tamaños de tipografía parece que estuvieses gritando como desaforado. Resulta muy difícil de leer.
Si te fijas, nadie escribe así en este foro.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 01/06/2011, 14:55
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problemas con Querys

Hola JACITOB3:

No sé si esto te pueda servir, utilizando la función GROUP_BY podrías hacer la concatenación de las categorías, aunque en en post especificas si se puede hacer sin funciones, pero dale un vistazo a ver si te sirve.

Código MySQL:
Ver original
  1. mysql> create table tabla (usuario varchar(15), categoria int);
  2. Query OK, 0 rows affected (0.19 sec)
  3.  
  4. mysql> insert into tabla values ('usuario1', 7), ('usuario1', 9),
  5.     -> ('usuario2', 9), ('usuario3', 7), ('usuario3',8),
  6.     -> ('usuario3', 9);
  7. Query OK, 6 rows affected (0.08 sec)
  8. Records: 6  Duplicates: 0  Warnings: 0
  9.  
  10. mysql> select * from tabla;
  11. +----------+-----------+
  12. | usuario  | categoria |
  13. +----------+-----------+
  14. | usuario1 |         7 |
  15. | usuario1 |         9 |
  16. | usuario2 |         9 |
  17. | usuario3 |         7 |
  18. | usuario3 |         8 |
  19. | usuario3 |         9 |
  20. +----------+-----------+
  21. 6 rows in set (0.06 sec)
  22.  
  23. mysql> Select usuario,group_concat(
  24.     -> case
  25.     -> when categoria=7 then 'CATEGORIA 7'
  26.     -> when categoria=8 then 'CATEGORIA 8'
  27.     -> when categoria=9 then 'CATEGORIA 9' end
  28.     -> )
  29.     -> categoria
  30.     -> from tabla
  31.     -> group by usuario
  32.     -> order by 1;
  33. +----------+-------------------------------------+
  34. | usuario  | categoria                           |
  35. +----------+-------------------------------------+
  36. | usuario1 | CATEGORIA 7,CATEGORIA 9             |
  37. | usuario2 | CATEGORIA 9                         |
  38. | usuario3 | CATEGORIA 7,CATEGORIA 8,CATEGORIA 9 |
  39. +----------+-------------------------------------+
  40. 3 rows in set (0.01 sec)

Ahora bien, con respecto a lo que comenta gnzsoloyo acerca del uso de estilos y colores, es preferible que utilices las etiquetas que proporciona el propio foro (QUOTE, CODE, HIGHLIGHT), o resaltar el texto en con negritas y/o subrayado.

Saludos
Leo
  #4 (permalink)  
Antiguo 01/06/2011, 15:09
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problemas con Querys

No olvidemos la función GROUP_CONCAT

Código MySQL:
Ver original
  1. mysql> SELECT usuario,GROUP_CONCAT(CONCAT('Categoria ',categoria) SEPARATOR ",") categoria FROM tabla GROUP BY usuario;
  2. +----------+-------------------------------------+
  3. | usuario  | categoria                           |
  4. +----------+-------------------------------------+
  5. | usuario1 | Categoria 7,Categoria 9             |
  6. | usuario2 | Categoria 9                         |
  7. | usuario3 | Categoria 7,Categoria 8,Categoria 9 |
  8. +----------+-------------------------------------+
  9. 3 rows in set (0.00 sec)
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 01/06/2011, 18:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problemas con Querys

Pensé por un momento en la función GROUP_CONCAT(), como propone huesos52, pero si se fijan en el último ejemplo que da, tal parece que quiere que cada categoría vaya en una columna separada. En ese caso o crea la sentencia dinámicamente con IFs consecutivos, o bien los obtiene con múltiples JOINs.
En cualquiera de los dos casos hay que trabajar con ambas cosas: Programación y SQL.
Cita:
++++++++++++++++++++++++++++++++++++++++
+ COLUMNA1 + CATEGORIA 7 + CATEGORIA 8 + CATEGORIA 9 +
++++++++++++++++++++++++++++++++++++++++
+ usuario1 + X + NULL + X +
+ usuario2 + NULL + NULL + X +
+ usuario3 + X + X + X +
++++++++++++++++++++++++++++++++++++++++
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 02/06/2011, 09:48
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problemas con Querys

Jejeje... el ejemplo que pone el compañero huesos52 sigue la misma idea que el mio, utilizando GROUP_CONCAT (yo tuve un error al momento de postear y puse GROUP_BY, pero si siguen el desarrollo del script al final utilizo la misma función)

Con respecto a la observación del compañero gnzsoloyo, este query serviría para el primer ejemplo que pone JACITOB3, en donde utiliza sólo dos columnas:

Cita:
++++++++++++++++++++++++++++++++++++++
+COLUMNA1 + COLUMNA2 +
++++++++++++++++++++++++++++++++++++++
+ usuario1 + CATEGORIA 7 CATEGORIA 9 +
+ usuario2 + CATEGORIA 9 +
+ usuario3 + CATEGORIA 7 CATEGORIA 8 CATEGORIA 9 +
++++++++++++++++++++++++++++++++++++++
según lo que entendí cualquiera de las dos presentaciones le serviría,

Para la segunda presentación, podría hacerlo más o menos así:

Código MySQL:
Ver original
  1. mysql> select * from tabla;
  2. +----------+-----------+
  3. | usuario  | categoria |
  4. +----------+-----------+
  5. | usuario1 |         7 |
  6. | usuario1 |         9 |
  7. | usuario2 |         9 |
  8. | usuario3 |         7 |
  9. | usuario3 |         8 |
  10. | usuario3 |         9 |
  11. +----------+-----------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT usuario,
  15.     -> if(find_in_set('7', group_concat(categoria)) > 0, 'X', null) categoria7,
  16.     -> if(find_in_set('8', group_concat(categoria)) > 0, 'X', null) categoria8,
  17.     -> if(find_in_set('9', group_concat(categoria)) > 0, 'X', null) categoria9
  18.     -> FROM tabla
  19.     -> GROUP BY usuario
  20.     -> ORDER BY 1;
  21. +----------+------------+------------+------------+
  22. | usuario  | categoria7 | categoria8 | categoria9 |
  23. +----------+------------+------------+------------+
  24. | usuario1 | X          | NULL       | X          |
  25. | usuario2 | NULL       | NULL       | X          |
  26. | usuario3 | X          | X          | X          |
  27. +----------+------------+------------+------------+
  28. 3 rows in set (0.00 sec)

Por supuesto que para ese ejercicio dependerá del número de categorías que pueda haber en la tabla

Ahora sólo habrá que esperar los comentarios del autor del post jejeje.

Saludos
Leo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:59.