Fórum Group By ? #260809

01/12/2004

0

Montei esse SQL:

[color=red:ac54331bed]Select DATA_VENCIMENTO, SUM(valor) AS vlr_Receber from AUT310 Where TIPO = :TIPO
and extract(year from DATA_VENCIMENTO) = :ANO
and extract(Month from DATA_VENCIMENTO) = :MES
group by DATA_VENCIMENTO order BY DATA_VENCIMENTO[/color:ac54331bed]

Como faço para agrupar por mês ao invés de por dia ?

Tipo, Todos os Contas receber do mes X do ano Y, só que eu preciso da DATA_VENCIMENTO dentro do select para montar o relatório.


Obriagada !

Renata.


Renata Coimbra

Renata Coimbra

Responder

Posts

01/12/2004

Vinicius2k

Renata,

Não dá... todas as colunas no SELECT precisam estar no GROUP BY e vice-versa, com exceção de colunas resultantes de funções....

Se vc estiver utilizando um SGBD que suporte agrupar por função, por exemplo o IB 6 não suporta já o FB 1.5 suporta, vc pode agrupar pelos resultados dos EXTRACTs, mas não poderá ter o DATA_VENCIMENTO no SELECT...
Na verdade, não faria sentido tê-la já que vc não a utilizaria no GROUP BY...

Espero ter ajudado...
T+


Responder

Gostei + 0

01/12/2004

Renata Coimbra

Obrigada Vinicius2K pela atenção !

o problema Vinicius2K é que eu preciso imprimir o mes e o ano dos resultados, exemplo:

Mes := MonthOf(queryDATA_VENCIMENTO.Value);
Ano := YearOf(queryDATA_VENCIMENTO.Value);

uso essas variaveis para imprimir no relatório, mais se minha query não tiver DATA_VENCIMENTO, como fazer, vc ver outra
solução pra isso ?

Muito obrigada !

Renata.


Responder

Gostei + 0

01/12/2004

Vinicius2k

Olá Renata !

Qual o SGBD? Existem alternativas, vou dar como exemplo no Firebird 1.5, mas depende do SGBD possibilitar agrupamento por função.

Traga o mes e o ano como colunas da SELECT e agrupe por eles, por exemplo :
select
  extract(year from DATA_VENCIMENTO) as ANO,
  extract(month from DATA_VENCIMENTO) as MES,
  sum(VALOR) as VLR_RECEBER
from
  AUT310
where
  TIPO = :tipo 
group by
  extract(year from DATA_VENCIMENTO) as ANO,
  extract(month from DATA_VENCIMENTO) as MES
order by
  extract(year from DATA_VENCIMENTO) as ANO,
  extract(month from DATA_VENCIMENTO) as MES

ou simplificando :
select
  extract(year from DATA_VENCIMENTO) as ANO,
  extract(month from DATA_VENCIMENTO) as MES,
  sum(VALOR) as VLR_RECEBER
from
  AUT310
where
  TIPO = :tipo 
group by
  1, 2
order by
  1, 2


Caso seu SGBD não suporte agrupar por função, IB 6 por exemplo, vc precisará criar uma View com os extracts ANO e MES, e fazer o select com agrupamento a partir desta View...
Caso seja um banco desktop, como paradox ou Access, vc precisará testar... não me recordo se eles agrupam por função...

OK ?

T+


Responder

Gostei + 0

01/12/2004

Renata Coimbra

Muito Obrigada Vinicius2K !

Deu certinho !


Um abraço !

Renata Coimbra


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar