Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Chave incompleta

Boa tarde,

Minha dúvida é o seguinte... Tenho 2 tabelas onde a única ligação entre elas é a conta. Uma tabela é a própria tabela de cadastro de contas, onde as contas possuem 9 caracteres, a outra tabela é uma tabela com descrição de níveis, onde as contas aparacem "incompletas" , por exemplo '311' = todas as contas que começam com 311... ou 42101 ....mostra sempre os primeiros dígitos, mas não tem um número certo de caracteres.

Alguém tem alguma ideia de como posso ligar essas 2 tabelas?

1 Solution

Accepted Solutions
maxgro
MVP
MVP

try this

// join the 2 tables to generate all combinations

Conta:

LOAD * INLINE [

CONTA

555123

555000

400100

300222

500222

111222

];

Join (Conta)

LOAD * INLINE [

NIVEL, CONTA2

1,555

2,5550

3,40

4,300

5,5

6,111

];

// wildmatch to get the possible join

Tmp:

load

  CONTA,   CONTA2,

  NIVEL,   len(CONTA2) as LEN,

  if(WildMatch(CONTA, CONTA2 & '*'), 1, 0) as Flag

Resident   Conta

where WildMatch(CONTA, CONTA2 & '*');

DROP Table Conta;

//

// if there are more than 1 possible join between the 2 tables I choose the longest (LEN desc)

//

Table:

NoConcatenate load * Resident Tmp where peek(CONTA) <> CONTA order by CONTA, LEN desc;

DROP Table Tmp;

View solution in original post

9 Replies
EduardoAlexandredeFrancisco

Rodrigo,

Acredito que primeiro vc deve entender qual a regra..

Vc vai montar a chave pelo 4 ou N primeiros dígitos? Porque a diferença de qtde de carácter é simples, pois pode ser completada por zero ou outro carácter.

Anonymous
Not applicable
Author

Então , não sei se expliquei direito...

mas é algo tipo, na tabela de níveis eu tenho :

nível conta

1      311

2     42101

(que representa todas as contas que começam com esses números, não tem uma quantidade de caracteres certos)

dai no cadastro de conta eu tenho la:

311010101

311010102

311010202

421010101

421020102

onde eu quero chegar :

nivel    conta

  1       311010101

  1       311010102

  1       311010202

  2       421010101

  2       421020102

é possível?

nicolett_yuri

Fiz aqui, mas estou achando a minha solução um pouco burra (para as 18h é o melhor que temos rsrsrs).

maxgro
MVP
MVP

try this

// join the 2 tables to generate all combinations

Conta:

LOAD * INLINE [

CONTA

555123

555000

400100

300222

500222

111222

];

Join (Conta)

LOAD * INLINE [

NIVEL, CONTA2

1,555

2,5550

3,40

4,300

5,5

6,111

];

// wildmatch to get the possible join

Tmp:

load

  CONTA,   CONTA2,

  NIVEL,   len(CONTA2) as LEN,

  if(WildMatch(CONTA, CONTA2 & '*'), 1, 0) as Flag

Resident   Conta

where WildMatch(CONTA, CONTA2 & '*');

DROP Table Conta;

//

// if there are more than 1 possible join between the 2 tables I choose the longest (LEN desc)

//

Table:

NoConcatenate load * Resident Tmp where peek(CONTA) <> CONTA order by CONTA, LEN desc;

DROP Table Tmp;

Anonymous
Not applicable
Author

Cria as regras ao nivel da BD e não no Edit Script.

Podes até criar Views para simular o que pretendes.

Seguramente terás menos problemas com joins, tabelas INLINE, etc dentro do QVD.

Anonymous
Not applicable
Author


Yuri , tinha pensado nisso no início também , mas achei que deveria ter algo mais simples, por isso postei aqui.

Massimo, era isso mesmo! O wildmatch era o que eu precisava.

Antonio, a tabela de níveis que eu tenho vem de planilha, tem que ser feito no Edit Script mesmo.

Obrigado pela ajuda pessoal!

Anonymous
Not applicable
Author

E os dados que existem no Excel não estão na Base de Dados?

Anonymous
Not applicable
Author

Não Antonio, são níveis(agrupamentos) específicos criados pela área, baseado em certas contas, não tem nenhum registro no sistema

Anonymous
Not applicable
Author

ok.

Nesse caso não têm outra solução.

Abr