Criação de Query

18/06/2010

Pessoa, eu tenho uma tabela de lançamentos de movimentos bancários e gostaria de contar os registros por pessoa.   Tabela Pessoa: IdPessoa, NomePessoa Table Movimentos: IdMovimento, IdPessoa, DataMovimento   Ficaria assim:   Mês             IdPessoa       QtdMovimentos Janeiro           01                       2 Fevereiro        02                       5 Março            03                       4   Tentei na sala MySQL mas ninguém respondeu, preciso disso o mais rápido possível, se alguém poder me ajudar...   Obrigado pessoal!

Sid Soluções

Respostas

18/06/2010

Tiago Melo

selec M.Mes, P.IdPessoa, Count(M.*) as QtdMovimentos
  from Movimentos M
  inner join Pessoa P
  on M.IdPessoa = P.IdPessoa
Group ByM.Mes, P.IdPessoa 
Responder Citar

18/06/2010

Wilson Paulista...!!!

Segue abaixo:
SELECT
  EXTRACT(MONTH FROM mov.DataMovimento) AS Mes,
  pes.NomePessoa,
  COUNT(mov.IdMovimento) AS Qtde
FROM
  MOVIMENTOS mov
    INNER JOIN PESSOA pes ON (mov.IdPessoa = pes.IdPessoa)
GROUP BY
  EXTRACT(MONTH FROM mov.DataMovimento),
  pes.NomePessoa


Espero ter colaborado.
Responder Citar

18/06/2010

Sid Soluções

Segue abaixo:
SELECT
  EXTRACT(MONTH FROM mov.DataMovimento) AS Mes,
  pes.NomePessoa,
  COUNT(mov.IdMovimento) AS Qtde
FROM
  MOVIMENTOS mov
    INNER JOIN PESSOA pes ON (mov.IdPessoa = pes.IdPessoa)
GROUP BY
  EXTRACT(MONTH FROM mov.DataMovimento),
  pes.NomePessoa
Espero ter colaborado.
. . Quando tento rodar, dá erro de sintaxe, (operador faltando)!
Responder Citar

18/06/2010

Tiago Melo

tem que ver porque esse script que o colega pssou acima só irá funcionar no firebird não é sql ansi....
se vc não usa firebird este ai não serve
Responder Citar

18/06/2010

Sid Soluções

tem que ver porque esse script que o colega pssou acima só irá funcionar no firebird não é sql ansi.... se vc não usa firebird este ai não serve
. . .   Exato, eu uso SQL axo q por isso que n está dando certo.   SELECT tblPessoa.NomePessoa, Count(tblMovimento.IdPessoa) AS Qtde, Month([Data]) AS Mes
FROM tblPessoa INNER JOIN tblMovimento ON tblPessoa.IdPessoa = tblMovimento.IdPessoa
GROUP BY tblPessoa.NomePessoa, tblMovimento.IdPessoa, Month([Data]);   O código acima funcionou, mas não tou conseguindo fazer aparecer o nome do mês ao invés do número:   Mes     Pessoa        Qtde 6         Joçao            1 6         Francisco      1 6         Alberto         2
Responder Citar

18/06/2010

Tiago Melo

amigo vc teria que fazer algumas alterações no master isso se vc usa sql server para poder aparecer o nome dos meses em portugues, porque no caso apareceria em inglês que é o padrão. Porém para resolver esse problema, você pode colocar um case da seguinte maneira

SELECT tblPessoa.NomePessoa, Count(tblMovimento.IdPessoa) AS Qtde, Month([Data]),

Case Month([Data])
  when 1 then 'Janeiro'
  when 2 then 'Fevereiro'
  when 3 then 'Março'
 
  até dezembro...
   
End Mes

FROM tblPessoa INNER JOIN tblMovimento ON tblPessoa.IdPessoa = tblMovimento.IdPessoa
GROUP BY tblPessoa.NomePessoa, tblMovimento.IdPessoa, Month([Data]);
Responder Citar

18/06/2010

Sid Soluções

amigo vc teria que fazer algumas alterações no master isso se vc usa sql server para poder aparecer o nome dos meses em portugues, porque no caso apareceria em inglês que é o padrão. Porém para resolver esse problema, você pode colocar um case da seguinte maneira SELECT tblPessoa.NomePessoa, Count(tblMovimento.IdPessoa) AS Qtde, Month([Data]), Case Month([Data])   when 1 then 'Janeiro'   when 2 then 'Fevereiro'   when 3 then 'Março'     até dezembro...     End Mes FROM tblPessoa INNER JOIN tblMovimento ON tblPessoa.IdPessoa = tblMovimento.IdPessoa GROUP BY tblPessoa.NomePessoa, tblMovimento.IdPessoa, Month([Data]);
. . .   Deu Erro de sitaxe, operador faltando na expressão de consulta 'Case Month([Data])
   when 1 then 'Janeiro'
   when 2 then 'Fevereiro'
   when 3 then 'Março'
   when 4 then 'Abril'
   when 5 then 'Maio'
   when 6 then 'Junho'
   when 7 then 'Julho'
   when 8 then 'Agosto'
   when 9 then 'Setembro'
   when 10'.
Responder Citar

18/06/2010

Tiago Melo

posta ai o seu script sql
Responder Citar

18/06/2010

Tiago Melo

só lembrando que em ... Case Month([Data]) esse [Data] é o seu campo de data ai...
Responder Citar

18/06/2010

Sid Soluções

só lembrando que em ... Case Month([Data]) esse [Data] é o seu campo de data ai...
.         SELECT tblPessoa.NomePessoa, Count(tblMovimento.IdPessoa) AS Qtde, Month([Data]) AS Mes
FROM tblPessoa INNER JOIN tblMovimento ON tblPessoa.IdPessoa=tblMovimento.IdPessoa
GROUP BY tblPessoa.NomePessoa, Month([Data]), tblMovimento.IdPessoa;
       
Responder Citar

18/06/2010

Tiago Melo

SELECT tblPessoa.NomePessoa, Count(tblMovimento.IdPessoa) AS Qtde,
Case Month(SEU_CAMPO_DATA)
  when 1 then 'Janeiro'
  when 2 then 'Fevereiro'
  when 3 then 'Março'
  when 4 then 'Abril'
  when 5 then 'Maio'
  when 6 then 'Junho'
  when 7 then 'Julho'
  when 8 then 'Agosto'
  when 9 then 'Setembro'
  when 10 then 'Outubro'
  when 11 then 'Novembro'
  when 12 then 'Dezembro'
End Mes
FROM tblPessoa
INNER JOIN tblMovimento
ON tblPessoa.IdPessoa = tblMovimento.IdPessoa
GROUP BY tblPessoa.NomePessoa, Month(SEU_CAMPO_DATA), tblMovimento.IdPessoa;


pronto resolvido altere o o texto SEU_CAMPO_DATA pelo seu campo de data ai da sua tabela
que está resolvido............
Responder Citar

18/06/2010

Tiago Melo

ainda na linha GROUP BY tblPessoa.NomePessoa, Month(SEU_CAMPO_DATA), tblMovimento.IdPessoa
o certo seria trocar Month(SEU_CAMPO_DATA) por mes, ja que apelidamos o resultado do case de mes entao seria...GROUP BY tblPessoa.NomePessoa, tblMovimento.IdPessoa, Mes

Responder Citar

18/06/2010

Tiago Melo

ainda na linha GROUP BY tblPessoa.NomePessoa, Month(SEU_CAMPO_DATA), tblMovimento.IdPessoa o certo seria trocar Month(SEU_CAMPO_DATA) por mes, ja que apelidamos o resultado do case de mes entao seria...GROUP BY tblPessoa.NomePessoa, tblMovimento.IdPessoa, Mes


ainda no sql server se vc quer o mês atual é isso aqui...

SELECT tblPessoa.NomePessoa, Count(tblMovimento.IdPessoa) AS Qtde,
Case Month(GetDate())
  when 1 then 'Janeiro'
  when 2 then 'Fevereiro'
  when 3 then 'Março'
  when 4 then 'Abril'
  when 5 then 'Maio'
  when 6 then 'Junho'
  when 7 then 'Julho'
  when 8 then 'Agosto'
  when 9 then 'Setembro'
  when 10 then 'Outubro'
  when 11 then 'Novembro'
  when 12 then 'Dezembro'
End Mes
FROM tblPessoa INNER JOIN tblMovimento ON tblPessoa.IdPessoa=tblMovimento.IdPessoa
GROUP BY tblPessoa.NomePessoa, tblMovimento.IdPessoa, Mes
Responder Citar

18/06/2010

Sid Soluções

Ae galera, se fosse vocês, talvez n conseguiri, vlw mesmo!!!
Responder Citar