Criação de Query
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!
Paulo Andrade
Curtidas 0
Respostas
Tiago Melo
18/06/2010
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
from Movimentos M
inner join Pessoa P
on M.IdPessoa = P.IdPessoa
Group ByM.Mes, P.IdPessoa
GOSTEI 0
Wilson Junior
18/06/2010
Segue abaixo:
Espero ter colaborado.
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.
GOSTEI 0
Paulo Andrade
18/06/2010
Segue abaixo:
Espero ter colaborado.
.
.
Quando tento rodar, dá erro de sintaxe, (operador faltando)!
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.
GOSTEI 0
Tiago Melo
18/06/2010
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
se vc não usa firebird este ai não serve
GOSTEI 0
Paulo Andrade
18/06/2010
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 Messe vc não usa firebird este ai não serve
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
GOSTEI 0
Tiago Melo
18/06/2010
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]);
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]);
GOSTEI 0
Paulo Andrade
18/06/2010
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])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]);
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'.
GOSTEI 0
Tiago Melo
18/06/2010
posta ai o seu script sql
GOSTEI 0
Tiago Melo
18/06/2010
só lembrando que em ... Case Month([Data]) esse [Data] é o seu campo de data ai...
GOSTEI 0
Paulo Andrade
18/06/2010
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 MesFROM tblPessoa INNER JOIN tblMovimento ON tblPessoa.IdPessoa=tblMovimento.IdPessoa
GROUP BY tblPessoa.NomePessoa, Month([Data]), tblMovimento.IdPessoa;
GOSTEI 0
Tiago Melo
18/06/2010
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............
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............
GOSTEI 0
Tiago Melo
18/06/2010
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
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
GOSTEI 0
Tiago Melo
18/06/2010
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
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
GOSTEI 0
Paulo Andrade
18/06/2010
Ae galera, se fosse vocês, talvez n conseguiri, vlw mesmo!!!
GOSTEI 0