Query agrupada y pasar fila a columna
Posted by:
Hugo Gsell
Date: April 25, 2020 07:56AM
Tengo tres tablas
producto: productos
Codigo: cada producto puede tener distintos tipos de codigo: barra, fabrica, interno
ProductoCodigo es la que relaciona un producto con su codigo. Un producto puede tener 0, 1.. n codigos (como máximo uno solo por tipo (tabla codigo))
CREATE TABLE producto
(
prod_id integer, prod_nombre nvarchar(50),
PRIMARY KEY (prod_id)
);
INSERT INTO PRODUCTO (prod_id,prod_nombre)
VALUES (1,'Aceite'), (2,'Arroz'), (3,'Harina')
CREATE TABLE codigo
(
cod_id integer, cod_nombre nvarchar(50),
PRIMARY KEY (cod_id)
);
INSERT INTO CODIGO (cod_id,cod_nombre)
VALUES (1,'CodBarra'), (2,'CodFabrica'), (3,'CodInterno')
CREATE TABLE CODPROD
(
prod_id integer, cod_id integer, codprod_Valor nvarchar(50),
PRIMARY KEY (prod_id,cod_id),
FOREIGN KEY (prod_id) REFERENCES producto(prod_id),
FOREIGN KEY (cod_id) REFERENCES codigo(cod_id)
);
INSERT INTO CODPROD (prod_id,cod_id,codprod_valor)
VALUES (1,1,'AAAA'), (1,2,'0000'), (1,3,'CINT01'),
(2,1,'BBBB'),
(2,3,'3333')
SELECT p.prod_id, p.prod_nombre,
if(c.cod_id = 1, codprod_valor, '') AS Codigo1,
if(c.cod_id = 2, codprod_valor, '') AS Codigo2,
if(c.cod_id = 3, codprod_valor, '') AS Codigo3
FROM producto p
LEFT JOIN codprod cp
ON p.prod_id=cp.prod_id
INNER JOIN codigo c
ON cp.cod_id=c.cod_id
Con estos datos y mi consulta obtengo:
prod_id prod_nombre Codigo1 Codigo2 Codigo3
1 Aceite AAAA "" ""
1 Aceite "" 0000 ""
1 Aceite "" "" CINT01
2 Arroz BBBB "" ""
2 Arroz "" "" 3333
y me interesa obtener
prod_id prod_nombre Codigo1 Codigo2 Codigo3
1 Aceite AAAA 0000 CINT01
2 Arroz BBBB 3333 ""
2 Harina "" "" ""
Desde ya muchas gracias a cualquier ayuda o punta que me tiren para resolver mi problema