Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Como posso simular um "not in" em um script com arquivo qvd?

Ola, saudação a todos

Sou desenvolvedor novo no Qlikview e gostaria de saber das possibilidades simular dentro de uma clausula "Where" um filtro do tipo "not in". Na linguagem SQL o que eu quero fazer funciona assim:

Select * from tabela where not in(valorA, valorB, valorC....)

O objetivo é consultar os registros que não estiverem em uma lista separada por virgulas

Labels (2)
1 Solution

Accepted Solutions
Not applicable
Author

Ol� pessoal, Mais uma forma de fazer:
Teste:LOAD Campo2 AS UFRESIDENT BaseWHERE NOT Match(Campo1,'Valor1','Valor2','Valor3');
Se precisar de coisas como: iniciado com A, que tenha o valor X, pode ainda utilizar WildMatch que aceita caracteres curingas ? e *. Ainda tem o MixMatch, que faz o mesmo que que o Match mas sem diferenciar minusculas de mai�sculas. Abra�o!

View solution in original post

9 Replies
Not applicable
Author

Olá,

Para fazer um "not in ()" vc deve utilizar um "Not Exists()"


valores:
LOAD * INLINE [
NOME_CAMPO
VALORA
VALORB
VALORC
];
Select * from tabela where not EXISTS(NOME_CAMPO, CAMPO_TABELA)
drop table valores;


Espero que isso lhe ajude.

Abraços.

Tonial.

Not applicable
Author

Obrigado Fernando, mas não é bem isso. Vou especificar bem o que quero, para que possa entender melho tenho um arquivo do tipo QVD e preciso fazer a pesquisa, mas essa não poderá retornar os registros que tiverem no CAMPO1 os valores de uma lista, que em meu caso vem de uma variável e que pode ser 1 valor ou vários valores separados por virgula. veja abaixo como está o script

-" LOAD * FROM ARQUIVO.QVD (qvd) WHERE CAMPO1 NOT IN('$(VAR1)');"

VAR1 = 'bbb', 'ccc', 'ddd'

assim se em meu QVD é

CAMPO1

CAMPO2

CAMPO3

aaa

Valor x1

Valor y1

bbb

Valor x2

Valor y2

ccc

Valor x3

Valor y3

ddd

Valor x4

Valor y3

eee

Valor x5

Valor y4

fff

Valor x6

Valor y5



o retorno deverá ser

CAMPO1

CAMPO2

CAMPO3

aaa

Valor x1

Valor y1

eee

Valor x5

Valor y4

fff

Valor x6

Valor y5



Not applicable
Author

Certo Mauro,

Seguindo esse seu exemplo, vc pode fazer assim:


//Definição de variável em QlikView.
SET VAR_ORIGINAL = "'bbb', 'ccc', 'ddd'";
//Laço para verificar todas possibilidades da variável
FOR EACH campo in $(VAR_ORIGINAL)
trace $(campo);
TMP_NOT_IN:
LOAD * INLINE [
CAMPO1
$(campo)
];
NEXT
//Leitura da tabela sem os valores do campo1 contidos na variável.
TESTE:
LOAD CAMPO1,
CAMPO2,
CAMPO3
FROM TMP_TESTE.QVD (qvd)
WHERE NOT EXISTS(CAMPO1);
//Elimina tabela temporária.
DROP TABLE TMP_NOT_IN;


O retorno da tabela teste é exatamente oq vc deseja.

Abraços.

Tonial.

Caique_Zaniolo
Employee
Employee

Um simples load inline resolve o problema.


Temp:
LOAD * INLINE [
CAMPO1
bbb
ccc
ddd
];

TESTE:
LOAD CAMPO1,
CAMPO2,
CAMPO3
FROM TMP_TESTE.QVD (qvd)
WHERE NOT EXISTS(CAMPO1);

DROP TABLE Temp;


Not applicable
Author

Grande Caique, esse havia sido a minha sujestão para o Mauro, mas ele disse que o valor dele esta em uma variável. Porisso tive que fazer um for each para gerar a tabela com um campo e com os valores necessários.

Abraços.

Tonial.

Not applicable
Author

Ol� pessoal, Mais uma forma de fazer:
Teste:LOAD Campo2 AS UFRESIDENT BaseWHERE NOT Match(Campo1,'Valor1','Valor2','Valor3');
Se precisar de coisas como: iniciado com A, que tenha o valor X, pode ainda utilizar WildMatch que aceita caracteres curingas ? e *. Ainda tem o MixMatch, que faz o mesmo que que o Match mas sem diferenciar minusculas de mai�sculas. Abra�o!
pablolabbe
Luminary Alumni
Luminary Alumni

Todas as respostas estão corretas, so depende como virá a informação de exclusão de registros.

Not applicable
Author

Boa Tarde a todos

Estou de volta e gostaria de agradecer a todos pelas respostas postadas. Apenas como retorno consegui o resultado esperado com a adaptação de algumas respostas. Na realidade postei com o intuíto de participar e verificar se existia uma maneira mais direta de resolver este problema e sem o uso de uma tabela auxiliar.
Mais um vez, Obrigado a todos.

aderlanrm
Partner - Specialist
Partner - Specialist

Olá Mauro,

Então coloca a forma que você conseguiu fazer ai e marque você mesmo como resposta.

Assim vai ajudar a outras pessoas que estão com dúvida e ganhar uns pontinhos.

Mas principalmente, não fazendo com que pessoas que querem ajudar entrem em tópicos que já estão respondidos.

Não sou moderador, mas já é o 4 tópico que entro hoje para tentar ajudar alguém e já está respondido.

Grande abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)