Select multinível
Olá pessoal,
Estou tentando fazer um select que mostra todos os itens derivados de um produto.
O problema é que toda a informação está na mesma tabela.
A tabela está assim :
ID; PRODUTO_PAI; PRODUTO_FILHO:
Meu problema é que a os filhos também são pais. neste caso preciso listar pai, os filhos e filhos dos filhos.
Estas informações podem chegar atá a 5 níveis.
Alguém pode me ajudar?
Estou tentando fazer um select que mostra todos os itens derivados de um produto.
O problema é que toda a informação está na mesma tabela.
A tabela está assim :
ID; PRODUTO_PAI; PRODUTO_FILHO:
Meu problema é que a os filhos também são pais. neste caso preciso listar pai, os filhos e filhos dos filhos.
Estas informações podem chegar atá a 5 níveis.
Alguém pode me ajudar?
Danrley Ferreira
Curtidas 0
Respostas
Emerson Nascimento
06/05/2020
tente assim:
pode ser assim também:
WITH cte_tree (nivel, PRODUTO_PAI, PRODUTO_FILHO, TREE) AS ( SELECT 2 nivel, PRODUTO_PAI, PRODUTO_FILHO, CAST(LTRIM(RTRIM(PRODUTO_PAI))+' > '+LTRIM(RTRIM(PRODUTO_FILHO)) AS VARCHAR(1024)) TREE FROM TABELA WHERE PRODUTO_PAI = 'X' -- aqui você indica o produto UNION ALL SELECT ct.nivel+1 nivel, t.PRODUTO_PAI, t.PRODUTO_FILHO, CAST(ct.TREE + ' > ' + LTRIM(RTRIM(t.PRODUTO_FILHO)) AS VARCHAR(1024)) TREE FROM TABELA t INNER JOIN cte_tree ct ON ct.PRODUTO_FILHO = t.PRODUTO_PAI ) SELECT 1 nivel, PRODUTO_PAI, '' PRODUTO_FILHO, PRODUTO_PAI TREE FROM TABELA WHERE PRODUTO_PAI = '1100-110V' and rownum = 1 UNION ALL SELECT nivel, PRODUTO_PAI, PRODUTO_FILHO, TREE FROM cte_tree ORDER BY TREE;
pode ser assim também:
WITH cte_tree (nivel, PRODUTO_PAI, PRODUTO_FILHO, TREE) AS ( SELECT 2 nivel, PRODUTO_PAI, PRODUTO_FILHO, CAST(LTRIM(RTRIM(PRODUTO_PAI))+' > '+LTRIM(RTRIM(PRODUTO_FILHO)) AS VARCHAR(1024)) TREE FROM TABELA WHERE PRODUTO_PAI = 'X' -- aqui você indica o produto UNION ALL SELECT ct.nivel+1 nivel, t.PRODUTO_PAI, t.PRODUTO_FILHO, CAST(ct.TREE + ' > ' + LTRIM(RTRIM(t.PRODUTO_FILHO)) AS VARCHAR(1024)) TREE FROM TABELA t INNER JOIN cte_tree ct ON ct.PRODUTO_FILHO = t.PRODUTO_PAI ) SELECT 1 nivel, '' PRODUTO_FILHO, PRODUTO_PAI TREE2, PRODUTO_PAI TREE FROM TABELA WHERE PRODUTO_PAI = '1100-110V' and rownum = 1 UNION ALL SELECT nivel, PRODUTO_FILHO, ' '+REPLICATE('| ',nivel-2)+'+---- '+PRODUTO_FILHO TREE2, TREE FROM cte_org ORDER BY TREE;
GOSTEI 0