MySQL Forums
Forum List  »  Spanish

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

Options: ReplyQuote


Subject
Views
Written By
Posted
Query agrupada y pasar fila a columna
235
April 25, 2020 07:56AM


Sorry, only registered users may post in this forum.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.