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