1
resposta

SELECT de todos clientes de um grupo que estão vinculados (CTE recusrsivo)

Boa tarde!

Pessoal estou com a seguinte dificuldade:

  • Imagina que eu tenha uma lista de vários Clientes, e cada cliente possui um Grupo de classificação ( o Grupo de Classificação pode ser repetido para alguns clientes);
  • De repente alguns clientes possuem um vínculo com outros clientes;
  • Preciso criar um Mapa de Vínculos em que ao pesquisar um cliente eu consiga exibir:
    • todos os clientes que pertence ao mesmo Grupo que o cliente pesquisado;
    • todos os clientes do grupo em que os clientes do Grupo principal possa estar vinculado Exemplo :
CREATE TABLE #GRUPO_CLIENTES
    (
         CODGRUPO    INT
        ,CPF_CNPJ    VARCHAR(15)
    )

    CREATE TABLE #CLIENTES
    (
         CODCLIENTE        INT PRIMARY KEY IDENTITY
        ,NOME            VARCHAR(50)
        ,CPF_CNPJ        VARCHAR(15)
    )

    INSERT INTO #CLIENTES
    VALUES
         ('AURORA', '37306895000105')
        ,('SADIA','37306895000222') 
        ,('PERDIGAO','37306895000333')
        ,('SEARA','37306895000444')
        ,('EMIRATES', '55172540000144')
        ,('AZUL','55172540000222')
        ,('TAM S/A','55172540000333')
        ,('GOL LINHAS AEREAS S/A','55172540000444')
        ,('FISHER PRICE','62085953000157')
        ,('RI HAPPY','62085953000222')
        ,('ESTRELA','62085953000333')
        ,('MATEL','62085953000444')
        ,('DAYCOVAL','06877315000106')
        ,('ITAU','06877315000222')
        ,('SANTANDER','06877315000333')
        ,('BRADESCO','06877315000444')
        ,('HABIBS','09429621000160')
        ,('MCDONALDS','09429621000111')
        ,('BOBS','09429621000222')
        ,('BURGER KING','09429621000333')
        ,('BMW','82779204000137')
        ,('FORD','82779204000222')
        ,('FIAT','82779204000333')
        ,('CHEVROLET','82779204000444')


INSERT INTO #GRUPO_CLIENTES VALUES
            (10, '37306895000105')
        ,(10,'37306895000222') 
        ,(10,'37306895000333')
        ,(10,'37306895000444')
        ,(10,'37306895000555')
        ,(15, '30933404000107')
        ,(15,'30933404000222')
        ,(15,'30933404000333')
        ,(15,'30933404000444')
        ,(15,'30933404000555')
        ,(20,'62085953000157')
        ,(20,'62085953000222')
        ,(20,'62085953000333')
        ,(20,'62085953000444')
        ,(20,'62085953000555')
        ,(25,'06877315000106')
        ,(25,'06877315000222')
        ,(25,'06877315000333')
        ,(25,'06877315000444')
        ,(25,'06877315000555')
        ,(30,'09429621000160')
        ,(30,'09429621000111')
        ,(30,'09429621000222')
        ,(30,'09429621000333')
        ,(35,'82779204000137')
        ,(35,'82779204000222')
        ,(35,'82779204000333')
        ,(35,'82779204000444')
        ,(35,'82779204000555')


    CREATE TABLE #MAPA_RISCO_VINCULOS
    (
         ID_VINCULO        INT PRIMARY KEY IDENTITY
        ,CNPJ_VINCULO    VARCHAR(14)
        ,CNPJ_ASSOCIADO VARCHAR(14)
        ,ATIVO            BIT
    )

    INSERT INTO #MAPA_RISCO_VINCULOS VALUES
     ( '37306895000105', '55172540000333', 1) -- AURORA+ TAM            10 + 15
    ,( '62085953000444', '37306895000444', 1) -- MATEL + SEARA        20 + 10    
    ,( '82779204000333', '62085953000222', 1) -- FIAT + RI HAPPY        35 + 20
    ,('06877315000444', '09429621000160' , 1) -- BRADESCO + HABIBS    25 + 30 

1 - Quando eu pesquisar pelo CNPJ 06877315000222 (ITAU) tem exibir:

  • todos os clientes do grupo da ITAU(BRADESCO, ITAU, SANTANDER, CAIXA), porque o cliente Bradesco foi vinculado ao cliente HABIBS;
  • todos os clientes do grupo da HABIBS(HABIBS, MCDONALDS, BURGER KING, BOBS)

2 - Já quando eu pesquisar o CNPJ 82779204000137 (BMW) tem que exibir:

  • todos os clientes do grupo da BMW (BMW, FIAT, CHEVROLET, FORD) porque o cliente Fiat foi vinculado com o cliente RI HAPPY;
  • todos os clientes do grupo RI HAPPY ( RI HAPPY, MATEL, ESTRELA , FISHER PRICE);
  • todos os clientes do grupo SEARA (AURORA, SEARA, PERDIGAO, SADIA) porque ela foi vinculado ao cliente MATEL
  • todos os clientes do grupo TAM (EMIRATES, TAM, GOL, AZUL) porque ela foi vinculado ao cliente AURORA que está no mesmo grupo que a SEARA vinculada anteriormente

Estava tentando fazer o seguinte procedimento: 1 - Verifico o CODGRUPO em que o cliente pesquisado ('BMW' , 82779204000137) faz parte e armazeno em uma tabela temporária todos os Cnpjs deste grupo; 2 - Armazeno todos os vínculos que estes clientes possuem;

E é aqui que eu me perco. Eu não estou encontrando uma forma de verificar se os clientes vinculados ao grupo principal possuem vínculos com outros clientes de outros grupos e exibir todos em um lugar só. Até estou tentando fazer com CTE Recursivo, mas não estou encaixando a lógica necessária. Quem puder dar ideias eu agradeço.

1 resposta

Olá Matias, tudo bem?

Você poderia disponibilizar mais alguns detalhes? Como por exemplo, como é feita essa busca, é através de um SELECT, ou você criou uma procedure e você chama essa procedure passando o CPF como parâmetro ? Em que tabela é feita a busca desse CFP, na tabela de #GRUPO_CLIENTES, #CLIENTES ou na tabela de #MAPA_RISCO_VINCULOS? Qual o banco de dados que você está trabalhando? Bom, mas então você poderia tentar usar procedure, VIEWS e até mesmo cursor para tentar realizar essa verificação de clientes vinculados e retornar os grupos, você já pensou nisso?

Aguardo o seu retorno!