Fórum Group By ? #260809
01/12/2004
0
[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
Curtir tópico
+ 0Posts
01/12/2004
Vinicius2k
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+
Gostei + 0
01/12/2004
Renata Coimbra
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.
Gostei + 0
01/12/2004
Vinicius2k
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+
Gostei + 0
01/12/2004
Renata Coimbra
Deu certinho !
Um abraço !
Renata Coimbra
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)