Skip to main content
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

Maicon, não consigo abrir um qvw com o Sense.

Minha estrutura esta assim:

LOAD

    CODCLI ,

    RSOCIALCLI  as NOME,

    NRINSCRICAOCLI,

    NFANTASIACLI as FANTASIA 

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

where CODCLI = '729';

concatenate (BGM_CLIENTE)

LOAD

    CLIENTE    ,

    NOME,

    FANTASIA,

    if(isNull(CPF),CGC,CPF) as NRINSCRICAOCLI

   

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

where CLIENTE = '8750';

maiconmello
Creator III
Creator III

LOAD

    CODCLI ,

    RSOCIALCLI  as NOME,

    NRINSCRICAOCLI,

    NFANTASIACLI as FANTASIA

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

//where CODCLI = '729';

concatenate (BGM_CLIENTE)

LOAD

    CLIENTE    ,

    NOME,

    FANTASIA,

    if(isNull(CPF),CGC,CPF) as NRINSCRICAOCLI

  

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

where not exists(NRINSCRICAOCLI, if(isNull(CPF),CGC,CPF) ) ;

Anonymous
Not applicable
Author

Maicon, tentei de todos os jeitos e a unica maneira que me pareceu ser uma luz foi assim:

LOAD

    NRCLI ,

    RSOCIALCLI  as NOME,

    NRINSCRICAOCLI,

    NFANTASIACLI as FANTASIA

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

concatenate

LOAD

    CLIENTE ,

    NOME,

    FANTASIA,

    CPF& '_' &CGC as NRINSCRICAOCLI

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

where not exists(NRINSCRICAOCLI, if(isNull(CPF),CGC,CPF) );

Tive que usar essa chave composta, porém na frente do CNPJ ou CPF do cliente ficou com _.

Estou procurando aqui algum material mais específico e fácil de entender essa questão de cruzar e unir tabelas e campos.

maiconmello
Creator III
Creator III

Amigo o mesmo if que tem no where faça para o campo CPF e CG no lugar que concatena os campos.

Anonymous
Not applicable
Author

Então Maicon, mas se faço dessa forma não funciona.

Script:

LOAD

    NRCLI ,

    RSOCIALCLI  as NOME,

    NRINSCRICAOCLI,

    NFANTASIACLI as FANTASIA

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

concatenate

LOAD

    CLIENTE ,

    NOME,

    FANTASIA,

    if(isNull(CPF),CGC,CPF) as NRINSCRICAOCLI

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

where not exists(NRINSCRICAOCLI, if(isNull(CPF),CGC,CPF) );

Resultado:

Dados.jpg

Veja que ao fazer a seleção de um cliente pelo nome perdemos o nrinscricaocli, tendo um '?' no lugar.

To quase sem cabelo já.. rsrs.

maiconmello
Creator III
Creator III

Amigão, então seu campo não esta como null, tem que fazer algo assim if(isnull(CGC) or CGC = '',CPF,CGC)

Isso que esta acontecendo, campos não estão nulos.

Anonymous
Not applicable
Author

Maicon, se o cliente for PF vai ter dados no campo CPF e o campo CNPJ vai ser vazio (null), se for PJ vai ter dados no campo CNPJ e fica null o campo CPF. Entendeu?

Olha o resultado da maneira que falou:

Dados.jpg

To achando que terei que estudar um distinct talvez. Fazer ele carregar uma nova tabela e nela carregar meu banco atual, depois faço a carga do banco antigo desconsiderando os registros que estiverem duplicado pelo CNPJ, porém mantendo apenas um.

maiconmello
Creator III
Creator III

Amigo passei a solução, isso eu entendi.

Agora acredito que você é novo com a ferramenta, só que acontece.

No código você da um where not exists (NRINCRICAS,if...) //que vale o mesmo que nr inscrição.

Nas duas bases o campo CNPJ ou CPF estão diferentes para esse cliente.

Leio a primeira parte certo ?

Load ....

Concatenate  // Juntando os dados

Load ... where not exists ... //aqui estou dizendo que concatena somente os registros que não possui o CNPJ da tabela de cima.

Quanto o CPF e CNPJ eu entendi perfeitamente, mas fazemos essa validação para deixar em um único campo conforme sua base nova.

Talvez amigo ,mais fácil contratar uma consultoria para te auxiliar. Ou ainda sugiro você sanear sua base.

Em algum lugar e ainda acho que é no banco antigo para esse cliente o campo CNPJ ou CPF contém '?' ao invés de ser nulo.

Anonymous
Not applicable
Author

Maicon, eu vejo isso como uma coisa simples de tratar, porém ainda está faltando algo.

Veja:

No banco antigo tenho os dois campos (CGC e CPF) conforme a imagem:

Viasoft.jpg

No banco novo no campo NRINSCRICAOCLI tenho as mesmas informações, porém no mesmo campo/coluna.

Globus.jpg

A parte de junção de tabelas eu entendi, porém os resultados estão errados e inconsistentes. Já até filtrei apenas um cliente na clausula where para comparar, mas mesmo assim ainda estava errado.

Eu não tenho muito conhecimento e como falei, essa é a primeira aplicação com necessidade de cruzamento de tabelas de bancos diferentes. Mas vou continuar procurando uma solução aqui e agradeço pela força de vontade em ajudar.

Obrigado novamente.

maiconmello
Creator III
Creator III

Amigo faça assim , queres que te ajude, gera o qvd do banco antigo e qvd do banco novo.

Me passa, maicon@jmaconsultoria.com

Me passa um exemplo tipo um cliente e como deveria ficar com a junção.

Assim te ajudo melhor !

Abraço