SQL - Pasar fila a columna de forma dinámica

   
Vista:

Pasar fila a columna de forma dinámica

Publicado por felipe (2 intervenciones) el 08/04/2017 20:45:54
Hola, tengo una base de datos la cual tiene las tiendas de un local, y tengo otra tabla que tiene las ventas por tienda.
Estoy haciendo un SP para obtener las ventas por tienda de la siguiente forma.
producto, local,total_vendido
1,local_A,10
2,local_A,30
3,Local_A,40
1,local_B,20

Pero quiero pasarlo de la siguiente forma.
producto | local_A | local_B | local_C
1 | 10 |20 | 0
2 | 30 | 0 | 0
3 | 40 | 0 | 0

el tema es que lo puedo realizar con case when para cada local, pero quiero hacerlo que independiente de la cantidad de tiendas, si se agrega otra tienda el sp lo obtenga de forma automática.

Si me pueden dar una ayuda
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 kip

Pasar fila a columna de forma dinámica

Publicado por kip (10 intervenciones) el 08/04/2017 22:39:38
Hola, no se en que motor de base de datos trabajas pero he hecho algo en MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SET @cols = '';
 
SELECT
    GROUP_CONCAT('MAX(CASE WHEN local = ''', local, ''' THEN total_vendido ELSE 0 END) AS `', local, '`')
INTO @cols
FROM
    (
        SELECT
            local
        FROM
            tabla
        GROUP BY
            local
    )
    x;
 
SET @query = CONCAT('SELECT producto, ', @cols, ' FROM tabla GROUP BY producto');
 
PREPARE stmt
FROM
    @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Cambia donde dice tabla por el nombre de tu tabla y deberia funcionarte, pruebalo y cuentanos si es lo que buscas.

Fuente: http://stackoverflow.com/questions/17964078/mysql-query-to-dynamically-convert-rows-to-columns-on-the-basis-of-two-columns
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

Pasar fila a columna de forma dinámica

Publicado por feli (2 intervenciones) el 09/04/2017 06:41:08
1
2
3
4
5
6
7
8
9
10
11
create or replace procedure sp_fila_columna()
begin
declare V_sql varchar(100);
set V_sql = SELECT
  GROUP_CONCAT(DISTINCT CONCAT('max(case when nombre_local = ''',nombre_local,''' then total_vendido end) as '', nombre_local, '''))
FROM   (select cod_producto, nombre_producto,nombre_local from rep_venta_productos) as d;
PREPARE stmt FROM V_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end;
$$

Eso fue lo que hice ya que en teoría la unión de tablas ya lo realice, pero no me deja compilar el SP.
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 kip

Pasar fila a columna de forma dinámica

Publicado por kip (10 intervenciones) el 09/04/2017 06:54:01
Podrias decirnos que motor de base de datos usas ? MySQL, SQL SERVER, etc ?
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
Revisar política de publicidad