Array
(
)

Criação de Query

Sid Soluções
|
MVP
Pontos: 100
    18 jun 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!

Tiago Melo
   - 18 jun 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 

0
|
0

Wilson Paulista...!!!
   - 18 jun 2010

Segue abaixo:
#Código

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.

0
|
0

Sid Soluções
|
MVP
Pontos: 100
    18 jun 2010


Citação:
Segue abaixo:
#Código

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)!

0
|
0

Tiago Melo
   - 18 jun 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

0
|
0

Sid Soluções
|
MVP
Pontos: 100
    18 jun 2010


Citação:
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

0
|
0

Tiago Melo
   - 18 jun 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]);

0
|
0

Sid Soluções
|
MVP
Pontos: 100
    18 jun 2010


Citação:
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'.

0
|
0

Tiago Melo
   - 18 jun 2010

posta ai o seu script sql

0
|
0

Tiago Melo
   - 18 jun 2010

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

0
|
0

Sid Soluções
|
MVP
Pontos: 100
    18 jun 2010


Citação:
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;
       

0
|
0

Tiago Melo
   - 18 jun 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............

0
|
0

Tiago Melo
   - 18 jun 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

0
|
0

Tiago Melo
   - 18 jun 2010


Citação:
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

0
|
0

Sid Soluções
|
MVP
Pontos: 100
    18 jun 2010

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

0
|
0