SQL - Crear tabla o hacer una consulta dinámica

   
Vista:
Imágen de perfil de 2elyoyo7

Crear tabla o hacer una consulta dinámica

Publicado por 2elyoyo7 (3 intervenciones) el 19/01/2015 19:43:32
Estimados:
Necesito crear una tabla o hacer una consulta dinámica en la cual me permita visualizar los datos repetidos hacia al costado en

columnas separadas


.


Ej:

Una empresa tiene muchos rubros y en una consulta simple aparece el registro cuantas beses tenga un rubro.

Lo que busco hacer, es aparecer la empresa solo una vez y en columnas apartes cada rubro que tiene la empresa.

Alguna idea?

Muchas Gracias.
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
Imágen de perfil de Isaias

Crear tabla o hacer una consulta dinámica

Publicado por Isaias (690 intervenciones) el 19/01/2015 23:47:22
Casi todo se puede, ¿pero como para que quieres hacer eso?
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
Imágen de perfil de 2elyoyo

Crear tabla o hacer una consulta dinámica

Publicado por 2elyoyo (3 intervenciones) el 20/01/2015 12:35:13
Porque algunos usuarios no entienden que se repita los datos.
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

Crear tabla o hacer una consulta dinámica

Publicado por leonardo_josue (877 intervenciones) el 20/01/2015 17:58:43
Hola 2elyoyo:

Mucho ojo: no hay que confundir cómo recuperas la información y cómo se la presentas al usuario, son cosas muy distintas.

El problema que planteas, suele "corregirse" en el lado de presentación de los datos. Tal como tú mismo lo mencionas, los datos en realidad no se repiten, es simplemente que así funciona la lógica de los DBMS's. si los usuarios NO ENTIENDEN POR QUÉ SE REPITEN estos datos, entonces es una cuestión de los usuarios, no del DBMS...

Ahora bien... es cierto que hay algunas técnicas para "corregir" esta situación desde el lado del DBMS, sin embargo no nos dices con qué BD's estás trabajando, por lo tanto resulta algo complicado darte una respuesta puntual. En MySQL por ejemplo, existe la función GROUP_CONCAT que te permite solventar este "problema", checa este ejemplo:

Supongamos que tienes la siguiente información en tus tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> SELECT * FROM empresa;
+------------+--------------+
| id_empresa | descripcion  |
+------------+--------------+
|          1 | Empresa UNO  |
|          2 | Empresa DOS  |
|          3 | Empresa TRES |
+------------+--------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM rubros_empresa;
+------------------+------------+-----------------+
| id_rubro_empresa | id_empresa | descripcion     |
+------------------+------------+-----------------+
|                1 |          1 | ROPA            |
|                2 |          1 | ZAPATOS         |
|                3 |          1 | ACCESORIOS      |
|                4 |          2 | ALIMENTOS       |
|                5 |          2 | VINOS Y LICORES |
|                6 |          3 | ROPA            |
+------------------+------------+-----------------+
6 rows in set (0.00 sec)

Si quisieras asociar los rubros que tiene cada una de las empresas, podrías hacerlo con un INNER JOIN:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT e.id_empresa, e.descripcion, re.descripcion
    -> FROM rubros_empresa re
    -> INNER JOIN empresa e ON re.id_empresa = e.id_empresa;
+------------+--------------+-----------------+
| id_empresa | descripcion  | descripcion     |
+------------+--------------+-----------------+
|          1 | Empresa UNO  | ROPA            |
|          1 | Empresa UNO  | ZAPATOS         |
|          1 | Empresa UNO  | ACCESORIOS      |
|          2 | Empresa DOS  | ALIMENTOS       |
|          2 | Empresa DOS  | VINOS Y LICORES |
|          3 | Empresa TRES | ROPA            |
+------------+--------------+-----------------+
6 rows in set (0.00 sec)

Aquí, tal como mencionas en tu post, la empresa aparece "repetida" en la consulta... entonces, una opción como te mencioné sería el GROUP_CONCAT:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT e.id_empresa, e.descripcion, GROUP_CONCAT(re.descripcion)
    -> FROM rubros_empresa re
    -> INNER JOIN empresa e ON re.id_empresa = e.id_empresa
    -> GROUP BY id_empresa;
+------------+--------------+------------------------------+
| id_empresa | descripcion  | GROUP_CONCAT(re.descripcion) |
+------------+--------------+------------------------------+
|          1 | Empresa UNO  | ROPA,ACCESORIOS,ZAPATOS      |
|          2 | Empresa DOS  | VINOS Y LICORES,ALIMENTOS    |
|          3 | Empresa TRES | ROPA                         |
+------------+--------------+------------------------------+
3 rows in set (0.00 sec)

En esta consulta, los rubros se "agrupan" en una columna, separando cada valor por una coma... Esta consulta es válida sólo para MySQL, pero sería cuestión de encontrar el equivalente si es que utilizas otro DBMS.

Insisto, este problema por lo general lo resuelves mediante programación al momento de presentarle la información al usuario, no desde la BD's, pero 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
Imágen de perfil de 2elyoyo7

Crear tabla o hacer una consulta dinámica

Publicado por 2elyoyo7 (3 intervenciones) el 20/01/2015 19:12:55
Esta bien lo que dices y esa solución la estoy haciendo, pero tu agrupación esta en un solo campo, mi problemática que debe están en diferentes columnas.

Disculpa si me exprese mal.

+------------+--------------+----------------------------------------------------------+
id_empresa | descripción | Tipo1 | tipo2 | Tipo3
+------------+--------------+----------------------------------------------------------+
1 | Empresa UNO | ROPA |ACCESORIOS | ZAPATOS
+------------+--------------+----------------------------------------------------------+
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