SQL - Obtener valores repetidos de una tabla por filas

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 21 puestos en SQL (en relación al último mes)
Gráfica de SQL

Obtener valores repetidos de una tabla por filas

Publicado por Sergio (2 intervenciones) el 09/03/2018 09:14:08
Buenos días,
Tengo una duda, y quiero saber si es posible obtener de una tabla aquellas columnas cuyos valores se repitan en más de otra columna de la misma fila. Y después hacerlo global, es decir, sacar repeticiones de toda la tabla Ejemplo

Col1 Col2 Col3 Col4
Fila1 1 2 3 1
Fila2 2 1 4 4
Fila3 4 4 2 2

Resultado Fila1 ( Col1, Col4 )
Resultado Fila2 ( Col3, Col4 )
Resultado Fila3 ( Col1, Col2 )-( Col3, Col4 )

Resultado Global (Col1, Col2, Col3, Col4) //Para este caso, ejemplo minimalista
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Obtener valores repetidos de una tabla por filas

Publicado por Leonardo Josué (1173 intervenciones) el 09/03/2018 16:05:57
Hola Sergio:

No nos dices con qué Base de Datos estás trabajando y por lo tanto no es posible darte una respuesta puntual, sin embargo, creo que ningún DBMS tiene algún mecanismo para hacer lo que quieres, pero puedes aprovechar algunas funcionalidades de los propios motores para hacer algunas consultas que te puedan servir.

Para este ejemplo voy a utilizar MySQL y la función de agregación GROUP_CONCAT. Voy a tomar como ejemplo la tabla que pusiste:

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM tabla;
+-------+------+------+------+------+
| fila  | col1 | col2 | col3 | col4 |
+-------+------+------+------+------+
| Fila1 |    1 |    2 |    3 |    1 |
| Fila2 |    2 |    1 |    4 |    4 |
| Fila3 |    4 |    4 |    2 |    2 |
+-------+------+------+------+------+
3 rows in set (0.00 sec)

En SQL las agrupaciones las puedes hacer a nivel de REGISTRO, no de COLUMNAS, por lo tanto, una idea que se me ocurre es primero cambiar tu tabla a REGISTROS con UNION's es decir, hacer algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mysql> SELECT fila, 'col1' columna, col1 valor FROM tabla
    -> UNION ALL
    -> SELECT fila, 'col2' columna, col2 valor FROM tabla
    -> UNION ALL
    -> SELECT fila, 'col3' columna, col3 valor FROM tabla
    -> UNION ALL
    -> SELECT fila, 'col4' columna, col4 valor FROM tabla;
+-------+---------+-------+
| fila  | columna | valor |
+-------+---------+-------+
| Fila1 | col1    |     1 |
| Fila2 | col1    |     2 |
| Fila3 | col1    |     4 |
| Fila1 | col2    |     2 |
| Fila2 | col2    |     1 |
| Fila3 | col2    |     4 |
| Fila1 | col3    |     3 |
| Fila2 | col3    |     4 |
| Fila3 | col3    |     2 |
| Fila1 | col4    |     1 |
| Fila2 | col4    |     4 |
| Fila3 | col4    |     2 |
+-------+---------+-------+
12 rows in set (0.00 sec)

Ha con la información de esta forma, entonces puedes AGRUPAR utilizando la función GROUP_CONCAT para obtener las columnas que tienen valores repetidos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> SELECT fila, valor, GROUP_CONCAT(columna) FROM
    -> (
    ->   SELECT fila, 'col1' columna, col1 valor FROM tabla
    ->   UNION ALL
    ->   SELECT fila, 'col2' columna, col2 valor FROM tabla
    ->   UNION ALL
    ->   SELECT fila, 'col3' columna, col3 valor FROM tabla
    ->   UNION ALL
    ->   SELECT fila, 'col4' columna, col4 valor FROM tabla
    -> ) T
    -> GROUP BY fila, valor
    -> HAVING COUNT(*) > 1;
+-------+-------+-----------------------+
| fila  | valor | GROUP_CONCAT(columna) |
+-------+-------+-----------------------+
| Fila1 |     1 | col4,col1             |
| Fila2 |     4 | col4,col3             |
| Fila3 |     2 | col4,col3             |
| Fila3 |     4 | col2,col1             |
+-------+-------+-----------------------+
4 rows in set (0.01 sec)

No se si esto te pueda servir. Si estás utilizando un motor distinto a MySQL, es cuestión sólo de que busques alguna equivalencia para simular esta funcionalidad.

haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 21 puestos en SQL (en relación al último mes)
Gráfica de SQL

Obtener valores repetidos de una tabla por filas

Publicado por Sergio (2 intervenciones) el 10/03/2018 08:03:30
Perfecto¡ Buena guia para rematar. Hace tiempo que no programo con sql y lo tenia oxiado, por ello me estaba poniendo ejercicios de este tipo. Y si, no dije el motor, era MySQL.

Un Saludo Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar