Ir para conteúdo

Trazer valores nulos além dos zerados


Posts Recomendados


  • Tópicos Que Criei:  236
  • Tópicos/Dia:  0.04
  • Meu Conteúdo:  798
  • Conteúdo/Dia:  0.13
  • Reputação:   3
  • Pontos/Conquistas:  6.333
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  44

Boa tarde,

Elaborei uma sentença que irá me retornar valores dentro de determinadas condições, vide:

SELECT C.REDUZIDO, C.DESCRICAO AS DESCRICAO_CONTA_CONTAB, (SUM(VLRDEBITO)-SUM(VLRCREDITO)), AS SALDO FROM CRATEIOLC R

INNER JOIN CCONTA C ON C.CODCONTA=R.CODCONTA

INNER JOIN CGERENCIA G ON G.CODCONTA=R.CODGERENCIAL

WHERE

R.DATA BETWEEN '2008-11-01' AND '2008-11-30'

AND C.REDUZIDO IN ('10937',' 10892','10983','11037',' 11039','11041','10951',' 10950','11016','10947',' 11067','11066','10956',' 11048','10987','11042',' 11003','10938','10960',' 10968','11068','12478')

AND G.CODCONTA LIKE '1.1.7.06.000'

GROUP BY C.DESCRICAO, C.REDUZIDO

Ela está ok, porém eu queria que ela me retornasse os valores nulos dentro daquela condição ali do where:

AND C.REDUZIDO IN

('10937','10892','10983',' 11037','11039','11041',' 10951',' 10950','11016',' 10947',' 11067','11066',' 10956','11048',' 10987',' 11042','11003','10938',' 10960','10968',' 11068',' 12478')

Ou seja, além de trazer os valores existentes, trousesse também os que estivessem zerados.

Tentei colocar isso:

WHERE

R.DATA BETWEEN '2008-11-01' AND '2008-11-30'

AND C.REDUZIDO IN ('10937','10892','10983',' 11037','11039','11041',' 10951','10950',' 11016',' 10947','11067','11066',' 10956','11048',' 10987',' 11042','11003',' 10938',' 10960',' 10968','11068',' 12478')

AND G.CODCONTA LIKE '1.1.7.06.000'

AND ((SUM(VLRDEBITO)-SUM(VLRCREDITO)) < '0' OR (SUM(VLRDEBITO)-SUM(VLRCREDITO)) = '0' OR (SUM(VLRDEBITO)-SUM(VLRCREDITO)) > '0')

GROUP BY C.DESCRICAO, C.REDUZIDO

Mas não deu certo, tem que ser feito junto com o HAVING. Alguma luz?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  19
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  122
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Rodrigo...

Você tem de mudar a cláusula WHERE, pois ela filtra tudo. Neste caso voce vai ter de alterar as suas cláusulas ON para que elas sim atendam as suas condições e aí sim com os INNER JOIN façam os agrupamentos mesmo com valores vazios.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  101
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  456
  • Conteúdo/Dia:  0.08
  • Reputação:   0
  • Pontos/Conquistas:  3.290
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  48

Rodrigo... se a sentença está ok acrescente o having no final...

SELECT C.REDUZIDO, C.DESCRICAO AS DESCRICAO_CONTA_CONTAB, (SUM(VLRDEBITO)-SUM(VLRCREDITO)) AS SALDO FROM CRATEIOLC R

INNER JOIN CCONTA C ON C.CODCONTA=R.CODCONTA

INNER JOIN CGERENCIA G ON G.CODCONTA=R.CODGERENCIAL

WHERE

R.DATA BETWEEN '2008-11-01' AND '2008-11-30'

AND C.REDUZIDO IN ('10937', '10892', '10983', '11037', '11039', '11041', '10951', '10950', '11016', '10947', '11067', '11066', '10956', '11048', '10987', '11042', '11003', '10938', '10960', '10968', '11068', '12478')

AND G.CODCONTA LIKE '1.1.7.06.000'

GROUP BY C.DESCRICAO, C.REDUZIDO

HAVING (A SITUAÇÃO QUE VC QUER... EX = HAVING C.REDUZIDO = 30)

NIK

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  236
  • Tópicos/Dia:  0.04
  • Meu Conteúdo:  798
  • Conteúdo/Dia:  0.13
  • Reputação:   3
  • Pontos/Conquistas:  6.333
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  44

Nik, no caso fiz como voce me disse colocando o having no final, e ainda coloquei um ISNULL ali aonde me traz o saldo, ou seja, seria que se o resultado do saldo fosse nulo, que me retornasse 0, então ficou:

SELECT C.REDUZIDO, C.DESCRICAO AS DESCRICAO_CONTA_CONTAB, ISNULL((SUM(VLRDEBITO)-SUM(VLRCREDITO)),0) AS SALDO FROM CRATEIOLC R

INNER JOIN CCONTA C ON C.CODCONTA=R.CODCONTA

INNER JOIN CGERENCIA G ON G.CODCONTA=R.CODGERENCIAL

WHERE

R.DATA BETWEEN '2008-11-01' AND '2008-11-30'

AND C.REDUZIDO IN ('10937', '10892', '10983', '11037', '11039', '11041', '10951', '10950', '11016', '10947', '11067', '11066', '10956', '11048', '10987', '11042', '11003', '10938', '10960', '10968', '11068', '12478')

AND G.CODCONTA LIKE '1.1.7.06.000'

GROUP BY C.DESCRICAO, C.REDUZIDO

HAVING ((SUM(VLRDEBITO)-SUM(VLRCREDITO)) < '0' OR (SUM(VLRDEBITO)-SUM(VLRCREDITO)) = '0' OR (SUM(VLRDEBITO)-SUM(VLRCREDITO)) > '0')

Mas ainda assim só trouxe valores aonde foi feito o cálculo, e não me trouxe os nulos.

Lameque, não entendi bem o que vc faloumas mas agradeço a intenção.

Editado por Henrique Caldeira
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  19
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  122
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Rodrigo tenta isso e vê se funciona

SELECT C.REDUZIDO, C.DESCRICAO AS DESCRICAO_CONTA_CONTAB, (SUM(VLRDEBITO)-SUM(VLRCREDITO)) AS SALDO

FROM CRATEIOLC R INNER JOIN CCONTA C

ON C.CODCONTA=R.CODCONTA

AND R.DATA BETWEEN '2008-09-01' AND '2008-11-30'

AND C.REDUZIDO IN('10937', '10892', '10983', '11037', '11039', '11041', '10951', '10950', '11016', '10947', '11067', '11066', '10956', '11048', '10987', '11042', '11003', '10938', '10960', '10968', '11068', '12478')

INNER JOIN CGERENCIA G

ON G.CODCONTA=R.CODGERENCIAL

AND G.CODCONTA LIKE '1.1.7.06.000'

GROUP BY C.DESCRICAO, C.REDUZIDO

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  236
  • Tópicos/Dia:  0.04
  • Meu Conteúdo:  798
  • Conteúdo/Dia:  0.13
  • Reputação:   3
  • Pontos/Conquistas:  6.333
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  44

Deu certo nao lamelque, e estranho que os valores ficaram divergentes na sentença.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  101
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  456
  • Conteúdo/Dia:  0.08
  • Reputação:   0
  • Pontos/Conquistas:  3.290
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  48

Rodrigo o problema é o seguinte...

A clausula having tem que haver um agrupamento... correto? e os dados nulos não pode ter agrupamento, ou seja, como agrupar dados nulos?

Dessa forma sugiro o seguinte...

Use essa parte da sentença que está funcionando para valores diferentes de nulo e faça un UNION com outra sentença trazendo somente os valores nulos. CAPITOU...

NIK

SELECT C.REDUZIDO, C.DESCRICAO AS DESCRICAO_CONTA_CONTAB, ISNULL((SUM(VLRDEBITO)-SUM(VLRCREDITO)),0) AS SALDO FROM CRATEIOLC R

INNER JOIN CCONTA C ON C.CODCONTA=R.CODCONTA

INNER JOIN CGERENCIA G ON G.CODCONTA=R.CODGERENCIAL

WHERE

R.DATA BETWEEN '2008-11-01' AND '2008-11-30'

AND C.REDUZIDO IN ('10937','10892','10983','11037','11039','11041','10951','10950','11016','10947','11067','11066','10956','11048','10987','11042','11003','10938','10960','10968','11068','12478')

AND G.CODCONTA LIKE '1.1.7.06.000'

GROUP BY C.DESCRICAO, C.REDUZIDO

HAVING ((SUM(VLRDEBITO)-SUM(VLRCREDITO)) < '0' OR (SUM(VLRDEBITO)-SUM(VLRCREDITO)) = '0' OR (SUM(VLRDEBITO)-SUM(VLRCREDITO)) > '0')

UNION

SELECT C.REDUZIDO, C.DESCRICAO AS DESCRICAO_CONTA_CONTAB, 0 AS SALDO FROM CRATEIOLC R

INNER JOIN CCONTA C ON C.CODCONTA=R.CODCONTA

INNER JOIN CGERENCIA G ON G.CODCONTA=R.CODGERENCIAL

WHERE ... (VALOR NULO)

Com certeza vai funcionar...

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  19
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  122
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Tenta trocar os INNER JOIN por LEFT JOIN, tomando cuidado para se ter as tabelas que "mandaram" na sentença do lado esquerdo e as que possam ter valores nulos no lado direito da sentença.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  236
  • Tópicos/Dia:  0.04
  • Meu Conteúdo:  798
  • Conteúdo/Dia:  0.13
  • Reputação:   3
  • Pontos/Conquistas:  6.333
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  44

Desatençao minha pessoal.

Esses valores não vão retornar nulo, pelo fato de não estarem como nulo... Simplesmente não existem valores para eles.

Não seria o caso de retorna o nulo, mas sim se ele não existir, retornar 0.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  92
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  791
  • Conteúdo/Dia:  0.13
  • Reputação:   1
  • Pontos/Conquistas:  4.838
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  38

Rodrigo, está resolvido?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  236
  • Tópicos/Dia:  0.04
  • Meu Conteúdo:  798
  • Conteúdo/Dia:  0.13
  • Reputação:   3
  • Pontos/Conquistas:  6.333
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  44

Não, não está.

Preciso que os 'C.REDUZIDOS' do WHERE, que não tiveram valores lançados, retornem 0 na consulta.

Mas não tô vendo como...

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  21
  • Conteúdo/Dia:  0.00
  • Reputação:   1
  • Pontos/Conquistas:  145
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  40

olá!

Pegue o campo que vc precise e coloque assim...

ex: flan.valorbaixado

where isnull (flan.valorbaixado, 0 ) = 0

Dessa forma, ele transforma todo nulo em 0 e vc pegará os zeros tb!

Testa aí! :)

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  92
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  791
  • Conteúdo/Dia:  0.13
  • Reputação:   1
  • Pontos/Conquistas:  4.838
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  38

ja tentou mudar os INNER JOIN por LEFT JOIN??

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  236
  • Tópicos/Dia:  0.04
  • Meu Conteúdo:  798
  • Conteúdo/Dia:  0.13
  • Reputação:   3
  • Pontos/Conquistas:  6.333
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  44

Dayana: O problema é que o valor não está presente na tabela, nem como nulo ele está.

Henrique: tentei agora e também nao trouxe.

Vou ter que reformular esta sentença, como está não dá. O paliativo 'burro' que fiz foi colocar uma sentença em cada linha da tabela, e trocar a cada linha, a conta.

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.