Qlik Community

Qlik Brasil

Welcome to the group for Brazil users. .All discussions will be in Portuguese.

Announcements
QlikWorld, June 24-25, 2020. Free virtual event for DI and DA gurus. Register Now
Highlighted
Not applicable

Ajuda Not Exists

Bom dia pessoal, estou tentando implementar a expressão "NOT EXISTS" do SqlServer à seguir:

set @DataMesAnt = CAST(CONVERT(CHAR(10), GETDATE(), 121) AS SMALLDATETIME)

IF NOT EXISTS(SELECT * FROM NfiCabV ncv JOIN NfiItmV niv ON  (

                                                               ncv.Nfi_Planta = niv.Nfi_Planta

                                                               AND ncv.Nfi_NotFis = niv.Nfi_NotFis

                                                               AND ncv.Nfi_Serie = niv.Nfi_Serie

                                                              )

                         WHERE  ncv.Nfi_Planta in ('01','06')

                         AND ncv.Nfi_DatEmi = @DataMesAnt

                         AND ncv.Nfi_OriNfi = 'P'

                         AND ncv.Nfi_SitNfi IS NULL

                         AND ncv.Nfi_Serie IN ('U1', '1') )

BEGIN

     set @DataMesAnt = CAST(CONVERT(CHAR(10), GETDATE()-1, 121) AS SMALLDATETIME)

END

Alguém poderia me ajudar a montar esse script ou tem algum material à respeito que eu possa ler?

1 Solution

Accepted Solutions
Highlighted
Specialist
Specialist

Re: Ajuda Not Exists

Boa noite.

O que você têm que fazer é criar um campo com a data que quer excluir.

Se for criar de banco, tem que fazer mais ou menos assim:

Você cria uma tabela com o campo DataMesAnt.

A parte do select(cria a data coma função de banco) é a parte da função de banco e o load a parte do qlikview.

MesAnt:

Load DataMesAnt;

SELECT  ........ as DataMesAnt

From tabela;


Depois você vai fazer a leitura da fato:


Fato:

Load *;

SELECT  ........ as DataMesAnt

From tabela

Where not exists(DataMesAnt);

Segue o help:

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.

View solution in original post

3 Replies
Highlighted
Specialist
Specialist

Re: Ajuda Not Exists

Boa tarde.

Não sei o que você quer fazer, mas o Not Exists no Qlikview é para verificar se não existe valor para campos de mesmo nome na nuvem de dados. Não sei se você pode utilizar assim.

Highlighted
Not applicable

Re: Ajuda Not Exists

Boa tarde Luciano. Sou iniciante com Qlik e estava desenvolvendo algumas consultas até me deparar com esse trecho de código. Estou tentando implementar ele, não necessariamente com Exists, mas até agora não me veio uma solução em mente. Obrigado por ajudar.

No problema em questão, eu preciso setar um valor em uma variável, mas só se aquela consulta acima retornar alguma linha. Nas minhas tentativas e erros não consegui ainda encaixar isso dentro de um IF no Qlik.

Highlighted
Specialist
Specialist

Re: Ajuda Not Exists

Boa noite.

O que você têm que fazer é criar um campo com a data que quer excluir.

Se for criar de banco, tem que fazer mais ou menos assim:

Você cria uma tabela com o campo DataMesAnt.

A parte do select(cria a data coma função de banco) é a parte da função de banco e o load a parte do qlikview.

MesAnt:

Load DataMesAnt;

SELECT  ........ as DataMesAnt

From tabela;


Depois você vai fazer a leitura da fato:


Fato:

Load *;

SELECT  ........ as DataMesAnt

From tabela

Where not exists(DataMesAnt);

Segue o help:

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.

View solution in original post