Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Desenvolvimento » Banco de dados e SQL » Modelagem de Dados: Hierarquias - Parte 4 -->
 
Avaliação: | Publicado em: 23/05/2007
Modelagem de Dados: Hierarquias - Parte 4


Alguns exemplos

Para que seja possível o entendimento do modelo dos caminhos aninhados é extremamente necessária a presença de exemplo. Os exemplos abaixo demonstram a aplicabilidade dessa técnica utilizando a fictícia empresa ARP Associados.

-- Selecionar todos os lançamentos dos centros de custo inferiores a TI imediatos ou não
DECLARE @IdCentroCusto INT
SET @IdCentroCusto = (SELECT IdCentroCusto FROM CentrosCusto WHERE NomeCentroCusto = 'TI')

SELECT
    CC1.NomeCentroCusto, CC2.NomeCentroCusto, DataLancamento, ValorLancamento
FROM
    CentrosCusto AS CC1, CentrosCusto AS CC2, Lancamentos AS LAN
WHERE
    CC2.ExtEsq BETWEEN CC1.ExtEsq AND CC1.ExtDir AND
    CC2.IdCentroCusto = LAN.IdCentroCusto AND
    CC1.IdCentroCusto = @IdCentroCusto

-- Selecionar todos os lançamentos do centro de custo superior a Arquitetura
DECLARE @IdCentroCusto INT
SET @IdCentroCusto = (SELECT IdCentroCusto FROM CentrosCusto WHERE NomeCentroCusto = 'Arquitetura')

SELECT
    CC1.NomeCentroCusto AS CentroCustoSUP,
    CC2.NomeCentroCusto AS CentroCustoINF,
    DataLancamento, ValorLancamento
FROM
    CentrosCusto AS CC1, CentrosCusto AS CC2, Lancamentos AS LAN
WHERE
    CC2.ExtEsq BETWEEN CC1.ExtEsq AND CC1.ExtDir AND
    CC1.IdCentroCusto = LAN.IdCentroCusto AND
    CC2.IdCentroCusto = @IdCentroCusto

-- Demonstrar o caminho do centro de Custo Copa até a Presidência
DECLARE @IdCentroCusto INT
SET @IdCentroCusto = (SELECT IdCentroCusto FROM CentrosCusto WHERE NomeCentroCusto = 'Copa')

SELECT
    CC1.NomeCentroCusto
FROM
    CentrosCusto AS CC1, CentrosCusto AS CC2
WHERE
    CC2.ExtEsq BETWEEN CC1.ExtEsq AND CC1.ExtDir AND
    CC2.IdCentroCusto = @IdCentroCusto
ORDER BY
    CC1.ExtDir ASC

-- Demonstrar o nível de cada centro de custo dentro da hierarquia
SELECT
    CC1.NomeCentroCusto, COUNT(CC2.IdCentroCusto) AS Nivel
FROM
    CentrosCusto AS CC1, CentrosCusto AS CC2
WHERE
    CC1.ExtEsq BETWEEN CC2.ExtEsq AND CC2.ExtDir
GROUP BY
    CC1.NomeCentroCusto
ORDER BY
    Nivel

Este artigo é a parte 4 de 4 da seguinte série:

luiz humberto de faria <lh_faria@hotmail.com>
parabens pelo artigo