Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Not applicable

Retornar uma tabela com registros não coincidentes

Bom dia!

Estou com uma dificuldade em fazer um load de duas tabelas e retirar apenas os dados que não foram localizados.

Em SQL, o código seria o seguinte:

SELECT TabelaA.* FROM base_1 as Tabela1, base_TabelaB as Tabela2

WHERE Tabela1.numero_contrato <> Tabela2.numero_contrato;

Em prática, quero construir o seguinte resultado:

Tabela A

Número ContratoInformação

Contrato1

A
Contrato2B
Contrato3A
Contrato4A
Contrato5B
Contrato6B
Contrato7C

Tabela B:

Número ContratoInformação
Contrato1A
Contrato5B
Contrato6B
Contrato7C

Tabela Resultado:

Número ContratoInformação
Contrato2B
Contrato3A
Contrato4A

Pesquisei em outros fóruns alguma sintaxe que pudesse me ajudar e não encontrei.

Já tentei colocar tags na hora de left join com "Encontrado" e fazer um load * resident TabelaResultado where tag<>'Encontrado', porém sem sucesso.

Obrigado!

Eduardo Magalhães

Tags (1)
1 Solution

Accepted Solutions
Employee
Employee

Re: Retornar uma tabela com registros não coincidentes

Seguindo a recomendação do Luciano Vasconcelos

TEMP1:

LOAD * INLINE [

    Número Contrato, Informação

    Contrato1, A

    Contrato5, B

    Contrato6, B

    Contrato7, C

];

NOCONCATENATE LOAD * INLINE [

    Número Contrato, Informação

    Contrato1, A

    Contrato2, B

    Contrato3, A

    Contrato4, A

    Contrato5, B

    Contrato6, B

    Contrato7, C

]

WHERE NOT Exists([Número Contrato],[Número Contrato]);

DROP Table TEMP1;

4 Replies
lucianosv
Valued Contributor

Re: Retornar uma tabela com registros não coincidentes

Bom dia.

É simples.

Você vai primeiro ler a tabela B.

Depois você vai ler  tabela A com a condição Where not exists Número Contrato e drop a tabela B.

Funciona da seguinte maneira: O Where not exists varre os valores de campos já carregados pelo nome do campo.

Segue explicação do help:

Funções Inter-registro

Essas funções são usadas quando um valor dos registros de dados carregados anteriormente é necessário para a avaliação do registro atual.

exists(campo [ , expressão ])

Determina se um valor de campo específico existe em um campo especificado dos dados carregados até o momento. Campo é um nome ou uma expressão de caractere que é avaliada para um nome de campo. O campo deve existir nos dados carregados até o momento pelo script. Expr é uma expressão avaliada para o valor de campo a ser pesquisado no campo especificado. Se for omitido, será assumido o valor do registro atual no campo especificado.

Exemplos:

exists(Mês, 'Jan') retorna -1 (verdadeiro) se o valor de campo 'Jan' puder ser encontrado no conteúdo atual do campo Mês.

exists(IDnr, IDnr) retorna -1 (verdadeiro) se o valor do campo IDnr no registro atual já existir em qualquer registro lido anteriormente naquele campo.

exists (IDnr) é idêntico ao exemplo anterior.

Load Funcionário, ID, Salário from Funcionários.csv;
Load Nome& ' ' &Sobrenome as Funcionário, Comentário from Cidadãos.csv where exists (Funcionário, Nome& ' ' &Sobrenome);
Serão lidos somente os comentários sobre os cidadãos que são funcionários.

Load A, B, C, from Funcionários.csv where not exists (A);
Isso equivale a executar um distinct load no campo A.

Highlighted

Re: Retornar uma tabela com registros não coincidentes

Eduardo, você pode fazer isso usando a função NOT Exists.

Segue uma app de exemplo com seus dados de teste

Employee
Employee

Re: Retornar uma tabela com registros não coincidentes

Seguindo a recomendação do Luciano Vasconcelos

TEMP1:

LOAD * INLINE [

    Número Contrato, Informação

    Contrato1, A

    Contrato5, B

    Contrato6, B

    Contrato7, C

];

NOCONCATENATE LOAD * INLINE [

    Número Contrato, Informação

    Contrato1, A

    Contrato2, B

    Contrato3, A

    Contrato4, A

    Contrato5, B

    Contrato6, B

    Contrato7, C

]

WHERE NOT Exists([Número Contrato],[Número Contrato]);

DROP Table TEMP1;

Not applicable

Re: Retornar uma tabela com registros não coincidentes

Muito obrigado!

Dessa forma consegui fazer a exclusão dos contratos que preciso avaliar!