Ver Mensaje Individual
  #5 (permalink)  
Antiguo 14/02/2017, 13:52
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 8 meses
Puntos: 447
Respuesta: buscar valores iguales en campos de un registro

Hola oripoll:

Lo que quieres hacer no es dificil, sin embargo tu modelo de datos no ayuda mucho... desde mi punto de vista tienes un mal diseño, pero bueno, me voy a enfocar en el problema sin ir a la raiz, para el ejemplo voy a suponer que tienes tus datos más o menos así:

Código:
mysql> SELECT * FROM tabla;
+------+------+------+------+------+------+
| id   | L1   | L2   | L3   | L4   | L5   |
+------+------+------+------+------+------+
|    1 | L    | L    | X    | F    | L    |
|    2 | X    | X    | X    | L    | L    |
|    3 | L    | L    | L    | L    | L    |
|    4 | X    | L    | X    | F    | X    |
|    5 | L    | F    | F    | F    | F    |
+------+------+------+------+------+------+
5 rows in set (0.00 sec)
Por cuestiones de espacio (y flojera, lo admito) sólo puse 5 columnas, para obener el total de L's, X's y F's que tiene cada id, lo puedes hacer de dos formas, una sería en forma de columnas, así:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   id,
  3.     ->   IF(L1 = 'L', 1, 0) + IF(L2 = 'L', 1, 0) + IF(L3 = 'L', 1, 0) + IF(L4 = 'L', 1, 0) + IF(L5 = 'L', 1, 0) total_l,
  4.     ->   IF(L1 = 'X', 1, 0) + IF(L2 = 'X', 1, 0) + IF(L3 = 'X', 1, 0) + IF(L4 = 'X', 1, 0) + IF(L5 = 'X', 1, 0) total_x,
  5.     ->   IF(L1 = 'F', 1, 0) + IF(L2 = 'F', 1, 0) + IF(L3 = 'F', 1, 0) + IF(L4 = 'F', 1, 0) + IF(L5 = 'F', 1, 0) total_f
  6.     -> FROM tabla;
  7. +------+---------+---------+---------+
  8. | id   | total_l | total_x | total_f |
  9. +------+---------+---------+---------+
  10. |    1 |       3 |       1 |       1 |
  11. |    2 |       2 |       3 |       0 |
  12. |    3 |       5 |       0 |       0 |
  13. |    4 |       1 |       3 |       1 |
  14. |    5 |       1 |       0 |       4 |
  15. +------+---------+---------+---------+
  16. 5 rows in set (0.00 sec)

Básicamente consiste en reemplazar las letras por 1's y después contar cada tipo. La otra forma sería un poco más "simple", y sería hacerlo en forma de renglones:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->    id, campo, COUNT(*) total
  3.     -> FROM
  4.     -> (
  5.     ->   SELECT id, l1 campo FROM tabla
  6.     ->   UNION ALL
  7.     ->   SELECT id, l2 campo FROM tabla
  8.     ->   UNION ALL
  9.     ->   SELECT id, l3 campo FROM tabla
  10.     ->   UNION ALL
  11.     ->   SELECT id, l4 campo FROM tabla
  12.     ->   UNION ALL
  13.     ->   SELECT id, l5 campo FROM tabla
  14.     -> ) T
  15.     -> GROUP BY id, campo;
  16. +------+-------+-------+
  17. | id   | campo | total |
  18. +------+-------+-------+
  19. |    1 | F     |     1 |
  20. |    1 | L     |     3 |
  21. |    1 | X     |     1 |
  22. |    2 | L     |     2 |
  23. |    2 | X     |     3 |
  24. |    3 | L     |     5 |
  25. |    4 | F     |     1 |
  26. |    4 | L     |     1 |
  27. |    4 | X     |     3 |
  28. |    5 | F     |     4 |
  29. |    5 | L     |     1 |
  30. +------+-------+-------+
  31. 11 rows in set (0.00 sec)

Dale un vistazo a ver si alguna de las dos te puede servir.

Saludos
Leo.