Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

União de tabelas de BD diferente

Pessoal, boa tarde.

Tenho aqui na empresa uma solicitação cuja qual eu ainda não tratei.

Preciso trabalhar com vendas de dois bancos de dados. Um desses bancos de dados é de um antigo ERP meu, e o outro BD é do meu ERP atual.

Vamos lá, tenho as seguintes tabelas:

BD antigo (Viasoft):

Tabela: PPESCLI (possui campos de dados do cliente como, cnpj, razão social, nome fantasia etc..)

BD atual (Globus)

Tabela CODCLI (possui campos de dados do cliente como, cnpj, razão social, nome fantasia etc..)

Estou tratando aqui apenas uma das tabelas que tenho, que seriam em torno de 21 tabelas com informações de notas fiscais, vendas, quantidades, valores...

Preciso de uma força para saber qual a melhor maneira de tratar esses dados e unifica-los.

Obrigado comunidade         

Labels (1)
41 Replies
Anonymous
Not applicable
Author

Pessoal, ficou assim depois de carregar as tabelas dos dois bancos.

Vejam que eu uni a CGC e CPF pois ela tem a mesma informação da NRINSCRICAOCLI, como faço agora pra unir as tabelas sem perder dados? Eu já tentei de tudo que é JOIN, KEEP, CONCATENATE.

O problema é que na validação o campo CLIENTE fica sem vinculo com o campo RSOCIAL e NFANTASIA.

LOAD

    CODCLI,

    NRCLI,

    RSOCIALCLI,

    NRINSCRICAOCLI,

    NFANTASIACLI

FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);

LOAD CLIENTE,

    NOME,

    FANTASIA,

    CGC& '|' &CPF as NRINSCRICAOCLI

FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd);

Me ajudem nessa.

Obrigado.

maiconmello
Creator III
Creator III

Amigo bom dia , seu código deveria ser assim  :

LOAD

    CODCLI,

    NRCLI,

    RSOCIALCLI       as NOME,

    NRINSCRICAOCLI  ,

    NFANTASIACL     as FANTASIA

FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);

concatenate

LOAD

    CLIENTE          as  CODCLI ,   //se o campo cliente é o código igual a tabela superior.

    NOME,

    FANTASIA,

   if(isnull(CGC),CPF,CGC) as NRINSCRICAOCLI  //aqui você vai usar ou CGC ou CPF

   

FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd);

Anonymous
Not applicable
Author

Maicon,

Aqui   if(isnull(CGC),CPF,CGC) as NRINSCRICAOCLI  //aqui você vai usar ou CGC ou CPF porque devo escolher entre um ou outro? Queria entender se precisar em outras situações.

O que preciso é unir a coluna CGC (que é o cnpj) e tambem a CPF. Depois vou jogar dentro do campo NRINSCRICAOCLI porque esse campo tem as duas informações no meu banco atual, ou seja, no banco atual as informações estão no mesmo campo, diferente do erp antigo que tinha uma coluna para cada campo.

Obrigado

maiconmello
Creator III
Creator III

Certo amigo , dessa forma que te enviei , você terá um campo só com cnpj e cpf e nr da insrição do cliente.

Anonymous
Not applicable
Author

Maicon,

Dentro do campo Incricaocli eu tenho as informações de cpf e cnpj no banco atual.

No outro banco esses dados são separados.

Tentei da forma que me falou, porém fica inconsiste. Fica com um ? em alguns clientes.

maiconmello
Creator III
Creator III

Amigão, desculpa, pode ser que não fui claro.

Essa validação if(isnull(CGC),CPF,CGC) as NRINSCRICAOCLI você vai fazer somente para o banco de dados que tem 2 campos CPF e CGC.

No outro não faça validação nenhuma, apenas carregue o campo NRINSCRICAOCLI .

O que eu entendi , que seu banco velho tem 2 campos.

Ou o cliente é PF ou PJ , quando PF terá CPF , quando PJ terá CGC.

Essa é a validação que é feita, se o campo PF esta nulo pega CNPJ se não usa o PF.

Anonymous
Not applicable
Author

Maicon, bom dia.

Entendi agora sua validação e realmente deu certo, houve a junção do campo CGC com o CPF e renomeamos para NRINSCRICAOCLI. Até ai tudo bem.

Dados.jpg

Conforme a figura temos o código do cliente 729 do sistema atual e 8750 do antigo.

Veja que temos a mesma informação em bancos diferentes e conseguimos traze-las. Em exceção o campo fantasia que no banco antigo é nulo tudo está correto.

O que preciso para finalizar de vez é que apenas eu tenha uma linha e não duas, pois tenho a mesma informação nessas duas linhas, ou seja, preciso ter apenas uma linha, pois o campo INSCRICAOCLI agora é comum nos dois bancos de dados.

Obrigado.

maiconmello
Creator III
Creator III

Entendi amigo.

Para ficar uma linha só, você teria ai sim que fazer diferente.

BancoOLDtmp:  //aqui criado um inline como se fosse seu banco antigo

LOAD * INLINE [

    CNPJ,CPF, Nome_Cli, Razao_Cli

    10  ,   ,Coca cola, Teste

    20  ,   ,WEG, Teste1

    30  ,   ,Marisol, Teste2

        ,01 ,Joao da Silva, Teste3

   

];

Bancounificado: Residente do seu banco antigo para tratar o CPF ou CNPJ em um banco so.

Load if(IsNull(CNPJ) or CNPJ = '',CPF,CNPJ) as NRInscricao,

     Nome_Cli                  as Nome,

     Razao_Cli     as Razao Resident BancoOLDtmp;  //Residente que comento em cima

    

drop Table BancoOLDtmp;  //Deleto a tabela do banco antigo e crio uma nova tabela chamado BANCO UNIFICADO.

Concatenate

//Aqui é seu banco novo

LOAD * INLINE [

    NRInscricao, Nome, Razao

    10, Coca cola, Teste

    20, WEG, Teste1

    30, Marisol, Teste2

    40, Malwee, Teste3

    002,maicon,teste4

] where not Exists(NRInscricao); // Aqui eu digo que carregue só que não existe na leitura de cima, validando pelo NRIsncrição que é p CNPJ ou CPF do cliente.

maiconmello
Creator III
Creator III

Segue o  modelo que simulei em anexo.

maiconmello
Creator III
Creator III

Agora para prevalecer o codigo do cliente novo por exemplo é só inverter o código.

BancoNovo:

LOAD * INLINE [

    NRInscricao, Nome, Razao,CodCli

    10, Coca cola, Teste,1000

    20, WEG, Teste1,2000

    30, Marisol, Teste2,3000

    40, Malwee, Teste3,4000

    002,maicon,teste4,5000

] ; // Aqui eu digo que carregue só que não existe na leitura de cima, validando pelo NRIsncrição que é p CNPJ ou CPF do cliente.

Concatenate

//Banco Antigo

Load if(IsNull(CNPJ) or CNPJ = '',CPF,CNPJ) as NRInscricao,

     Nome_Cli                  as Nome,

     Razao_Cli     as Razao ,

     cod                       as CodCli Resident BancoOLDtmp where not Exists(NRInscricao,if(IsNull(CNPJ) or CNPJ = '',CPF,CNPJ));

drop Table BancoOLDtmp;