Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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!Teste:LOAD Campo2 AS UFRESIDENT BaseWHERE NOT Match(Campo1,'Valor1','Valor2','Valor3');
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.
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 |
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.
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;
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.
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!Teste:LOAD Campo2 AS UFRESIDENT BaseWHERE NOT Match(Campo1,'Valor1','Valor2','Valor3');
Todas as respostas estão corretas, so depende como virá a informação de exclusão de registros.
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.
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.