Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ajuda com query e subquery


adairasilva

Pergunta

Pessoal boa noite,

Gostaria de testar a query se existe registro e tambem a subquery se possui registros nas referidas condicoes mensalmente, e possivel fazer desta forma.

Select
Count(Month(associado.dtfiliacao)) As Jan,
Fev.Fev,
Mar.Mar,
Abr.abr,
Mai.mai,
jun.Jun,
jul.Jul,
ago.Ago,
`set`.`Set`,
`out`.`Out`,
nov.Nov,
dez.Dez
From
associado,
(Select Count(Month(associado.dtfiliacao)) As Fev
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
2) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) Fev,
(Select Count(Month(associado.dtfiliacao)) As Mar
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
3) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) Mar,
(Select Count(Month(associado.dtfiliacao)) As abr
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
4) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) Abr,
(Select Count(Month(associado.dtfiliacao)) As mai
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
5) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) Mai,
(Select Count(Month(associado.dtfiliacao)) As Jun
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
6) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) jun,
(Select Count(Month(associado.dtfiliacao)) As Jul
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
7) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) jul,
(Select Count(Month(associado.dtfiliacao)) As Ago
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
8) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) ago,
(Select Count(Month(associado.dtfiliacao)) As `Set`
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
9) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) `set`,
(Select Count(Month(associado.dtfiliacao)) As `Out`
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
10) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) `out`,
(Select Count(Month(associado.dtfiliacao)) As Nov
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
11) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) nov,
(Select Count(Month(associado.dtfiliacao)) As Dez
From associado
Where (associado.CDEMPRESA = 2) And (Month(associado.dtfiliacao) =
12) And (Year(associado.dtfiliacao) = 2014) And (associado.ATIVO =
'N')) dez
Where
(associado.CDEMPRESA = 2) And
(Month(associado.dtfiliacao) = 1) And
(Year(associado.dtfiliacao) = 2014) And
(associado.ATIVO = 'N')
Group By
Fev.Fev,
Mar.Mar,
Abr.abr,
Mai.mai,
jun.Jun,
jul.Jul,
ago.Ago,
`set`.`Set`,
`out`.`Out`,
nov.Nov,
dez.Dez

Na consulta acima retorno null pois no primeiro mes não há registro somente no quarto mes possui, ao invés de retornar null queria retorna 0.

Agradeco a todos .

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Tenta assim.

Select
SUM(IF(MONTH(dtfiliacao = 1, 1,0)) As Jan,
SUM(IF(MONTH(dtfiliacao = 2, 1,0)) As Fev,
SUM(IF(MONTH(dtfiliacao = 3, 1,0)) As Mar,
SUM(IF(MONTH(dtfiliacao = 4, 1,0)) As Abr,
SUM(IF(MONTH(dtfiliacao = 5, 1,0)) As Mai,
SUM(IF(MONTH(dtfiliacao = 6, 1,0)) Jun,
SUM(IF(MONTH(dtfiliacao = 7, 1,0)) As Jul,
SUM(IF(MONTH(dtfiliacao = 8, 1,0)) As Ago,
SUM(IF(MONTH(dtfiliacao = 9, 1,0)) As Set,
SUM(IF(MONTH(dtfiliacao =10, 1,0)) As Out,
SUM(IF(MONTH(dtfiliacao =11, 1,0)) As Nov,
SUM(IF(MONTH(dtfiliacao =12, 1,0)) As Dez,
FROM associado
WHERE CDEMPRESA = 2 YEAR(dtfiliacao) = 2014 And ATIVO = 'N'
Link para o comentário
Compartilhar em outros sites

  • 0

Denis bom dia,

E obrigado desde já pelaajuda.

apresenta um erro de Sql - Erro de execucao #1064 resposta do banco de dados

You have an error in your sql syntax; check the manual that corresponds to your Mysql server version for the right

syntax to uso near '1,0)) as jan.

Sum(if(month(dtfiliacao = 2,1,0)) as Fev,

sum(if(month(dtfilia' at line 2

Link para o comentário
Compartilhar em outros sites

  • 0

Ok. Corrigindo.

Select
SUM(IF(MONTH(dtfiliacao = 1, 1,0))) As Jan,
SUM(IF(MONTH(dtfiliacao = 2, 1,0))) As Fev,
SUM(IF(MONTH(dtfiliacao = 3, 1,0))) As Mar,
SUM(IF(MONTH(dtfiliacao = 4, 1,0))) As Abr,
SUM(IF(MONTH(dtfiliacao = 5, 1,0))) As Mai,
SUM(IF(MONTH(dtfiliacao = 6, 1,0))) As Jun,
SUM(IF(MONTH(dtfiliacao = 7, 1,0))) As Jul,
SUM(IF(MONTH(dtfiliacao = 8, 1,0))) As Ago,
SUM(IF(MONTH(dtfiliacao = 9, 1,0))) As Set,
SUM(IF(MONTH(dtfiliacao =10, 1,0))) As Out,
SUM(IF(MONTH(dtfiliacao =11, 1,0))) As Nov,
SUM(IF(MONTH(dtfiliacao =12, 1,0))) As Dez,
FROM associado
WHERE CDEMPRESA = 2 YEAR(dtfiliacao) = 2014 And ATIVO = 'N'
Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal bom dia,

Consegui resolver com a ajuda do Denis da seguinte forma.

select
IF(MONTH(DTFILIACAO)=1,COUNT(CDEMPRESA),0) As Jan,
IF(MONTH(DTFILIACAO)=2,COUNT(CDEMPRESA),0) As Fev,
IF(MONTH(DTFILIACAO)=3,COUNT(CDEMPRESA),0) As Mar,
IF(MONTH(DTFILIACAO)=4,COUNT(CDEMPRESA),0)As Abr,
IF(MONTH(DTFILIACAO)=5,COUNT(CDEMPRESA),0) As Mai,
IF(MONTH(DTFILIACAO)=6,COUNT(CDEMPRESA),0) Jun,
IF(MONTH(DTFILIACAO)=7,COUNT(CDEMPRESA),0) As Jul,
IF(MONTH(DTFILIACAO)=8,COUNT(CDEMPRESA),0) As Ago,
IF(MONTH(DTFILIACAO)=9,COUNT(CDEMPRESA),0) As 'Set',
IF(MONTH(DTFILIACAO)=10,COUNT(CDEMPRESA),0) As 'Out',
IF(MONTH(DTFILIACAO)=11,COUNT(CDEMPRESA),0) As Nov,
IF(MONTH(DTFILIACAO)=11,COUNT(CDEMPRESA),0) As Dez
FROM associado
WHERE CDEMPRESA = 2 and YEAR(dtfiliacao) = 2014 And ATIVO = 'N'
Obrigado Denis para ajuda.
Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal,

Fechei o tópico anterior, errado, desculpe. A questão é agora é os dados que não saindo corretamente a query funcionou perfeitamente. Porem ao efetuar as comparações de dados esta assim.

QUERY CORRETA MENSALMENTE

select MONTH(DTFILIACAO) AS Mes, COUNT(DTFILIACAO) AS QTE FROM associado
WHERE CDEMPRESA = 3 and YEAR(dtfiliacao) = 2015 And ATIVO = 'S'
GROUP BY MONTH(DTFILIACAO);
RESULTADO:
MES =============== QUANT.
1 101
2 20
QUERY APLICADA CONFORME SUGESTOES E CORREÇÕES
select
IF(MONTH(DTFILIACAO)=1,COUNT(CDEMPRESA),0) As Jan,
IF(MONTH(DTFILIACAO)=2,COUNT(CDEMPRESA),0) As Fev,
IF(MONTH(DTFILIACAO)=3,COUNT(CDEMPRESA),0) As Mar,
IF(MONTH(DTFILIACAO)=4,COUNT(CDEMPRESA),0)As Abr,
IF(MONTH(DTFILIACAO)=5,COUNT(CDEMPRESA),0) As Mai,
IF(MONTH(DTFILIACAO)=6,COUNT(CDEMPRESA),0) Jun,
IF(MONTH(DTFILIACAO)=7,COUNT(CDEMPRESA),0) As Jul,
IF(MONTH(DTFILIACAO)=8,COUNT(CDEMPRESA),0) As Ago,
IF(MONTH(DTFILIACAO)=9,COUNT(CDEMPRESA),0) As 'Set',
IF(MONTH(DTFILIACAO)=10,COUNT(CDEMPRESA),0) As 'Out',
IF(MONTH(DTFILIACAO)=11,COUNT(CDEMPRESA),0) As Nov,
IF(MONTH(DTFILIACAO)=11,COUNT(CDEMPRESA),0) As Dez
FROM associado
WHERE CDEMPRESA = 3 and YEAR(dtfiliacao) = 2015 And ATIVO = 'S';
RESULTADO
jan,fev, mar, abr, mai, jun,jul,ago, set, out, nov, dez
121 0 0 0 0 0 0 0 0 0 0 0
O que deveria aparecer nos respectivos meses aparece apenas no primeiro mes.
Obs. Se adicionar o group by depois do where ficara duas linhas o que não é o esperado. Porem nas colunas corretas.
101 0 0 0 0 0 0 0 0 0 0 0
0 20 0 0 0 0 0 0 0 0 0 0
Onde esta o erro desta consulta
Desde já agradeço
Link para o comentário
Compartilhar em outros sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

Pessoal,

Fechei o tópico anterior, errado, desculpe. A questão é agora é os dados que não saindo corretamente a query funcionou perfeitamente. Porem ao efetuar as comparações de dados esta assim.

QUERY CORRETA MENSALMENTE

select MONTH(DTFILIACAO) AS Mes, COUNT(DTFILIACAO) AS QTE FROM associado
WHERE CDEMPRESA = 3 and YEAR(dtfiliacao) = 2015 And ATIVO = 'S'
GROUP BY MONTH(DTFILIACAO);
RESULTADO:
MES =============== QUANT.
1 101
2 20
QUERY APLICADA CONFORME SUGESTOES E CORREÇÕES
select
IF(MONTH(DTFILIACAO)=1,COUNT(CDEMPRESA),0) As Jan,
IF(MONTH(DTFILIACAO)=2,COUNT(CDEMPRESA),0) As Fev,
IF(MONTH(DTFILIACAO)=3,COUNT(CDEMPRESA),0) As Mar,
IF(MONTH(DTFILIACAO)=4,COUNT(CDEMPRESA),0)As Abr,
IF(MONTH(DTFILIACAO)=5,COUNT(CDEMPRESA),0) As Mai,
IF(MONTH(DTFILIACAO)=6,COUNT(CDEMPRESA),0) Jun,
IF(MONTH(DTFILIACAO)=7,COUNT(CDEMPRESA),0) As Jul,
IF(MONTH(DTFILIACAO)=8,COUNT(CDEMPRESA),0) As Ago,
IF(MONTH(DTFILIACAO)=9,COUNT(CDEMPRESA),0) As 'Set',
IF(MONTH(DTFILIACAO)=10,COUNT(CDEMPRESA),0) As 'Out',
IF(MONTH(DTFILIACAO)=11,COUNT(CDEMPRESA),0) As Nov,
IF(MONTH(DTFILIACAO)=11,COUNT(CDEMPRESA),0) As Dez
FROM associado
WHERE CDEMPRESA = 3 and YEAR(dtfiliacao) = 2015 And ATIVO = 'S';
RESULTADO
jan,fev, mar, abr, mai, jun,jul,ago, set, out, nov, dez
121 0 0 0 0 0 0 0 0 0 0 0
O que deveria aparecer nos respectivos meses aparece apenas no primeiro mes.
Obs. Se adicionar o group by depois do where ficara duas linhas o que não é o esperado. Porem nas colunas corretas.
101 0 0 0 0 0 0 0 0 0 0 0
0 20 0 0 0 0 0 0 0 0 0 0
Onde esta o erro desta consulta
Desde já agradeço

Resolvido conforme query anterior.

Link para o comentário
Compartilhar em outros sites

  • 0

O erro é simples. Você está usando de forma indevida a função de agregação COUNT.

Eu te passei o SUM(IF(condição,1,0)) que faz a contagem de forma condicional e você trocou por SUM(IF(confição,COUNT(campo),0)), que conta de forma global e não respeita a forma condicional que você quer.

Refaça e poste os resultados.

Link para o comentário
Compartilhar em outros sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

O erro é simples. Você está usando de forma indevida a função de agregação COUNT.
Eu te passei o SUM(IF(condição,1,0)) que faz a contage de forma condicional e você trocou por SUM(IF(confição,COUNT(campo),0)), que conta de forma global e não respeita a forma condicional que você quer.
Refaça e poste os resultados.

o Denis esta correto. Apenas corrigi a questão de "," e ")" e funcionou ficando desta forma.

Select
SUM(IF(MONTH(dtfiliacao) = 1, 1,0)) As Jan,
SUM(IF(MONTH(dtfiliacao) = 2, 1,0)) As Fev,
SUM(IF(MONTH(dtfiliacao) = 3, 1,0)) As Mar,
SUM(IF(MONTH(dtfiliacao) = 4, 1,0)) As Abr,
SUM(IF(MONTH(dtfiliacao) = 5, 1,0)) As Mai,
SUM(IF(MONTH(dtfiliacao) = 6, 1,0)) As Jun,
SUM(IF(MONTH(dtfiliacao) = 7, 1,0)) As Jul,
SUM(IF(MONTH(dtfiliacao) = 8, 1,0)) As Ago,
SUM(IF(MONTH(dtfiliacao) = 9, 1,0)) As 'Set',
SUM(IF(MONTH(dtfiliacao) =10, 1,0)) As 'Out',
SUM(IF(MONTH(dtfiliacao) =11, 1,0)) As Nov,
SUM(IF(MONTH(dtfiliacao) =12, 1,0)) As Dez
FROM associado
WHERE CDEMPRESA = 3 AND YEAR(dtfiliacao) = 2015 And ATIVO = 'S'
Muito obrigado Denis,
tópico fechado.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...