Ir para conteúdo
Fórum Script Brasil
  • 0

FAZER UM DISTINCT COM SOMA E AGRUPAR POR MES


ToPronto N'Area

Pergunta

E ai pessoal, to com uma duvida bruta. Eu estou trabalhando em um relatorio de analise financeira, onde o programa irá buscar da tabela "Pagar" os campos subsetor, setor, valorpago, datapgto, situaçao o sql ficou este:

With FrmComp

sql = "select pagar.subsetor,sum(pagar.valorpago) as vlrpago, pagar.datapgto, setor.setor, setor.CODIGO from pagar inner join setor on pagar.setor = setor.codigo "

sql = sql & "WHERE DATAPGTO >= #" & Format(.Ctxt(0).Text, "mm/dd/yyyy") & "# "

sql = sql & "AND DATAPGTO <= #" & Format(.Ctxt(1).Text, "mm/dd/yyyy") & "#"

sql = sql & "and SITUAÇAO LIKE '" & "Pag" & "' "

End With

sql = sql & " group by pagar.subsetor, setor.setor, SETOR.CODIGO, pagar.datapgto "

sql = sql & " ORDER BY pagar.datapgto, pagar.subsetor"

Até ai ele funciona perfeitamente se eu colocar nos ctxt um periodo mensal referente a um mes somente por ex. .ctxt(0).text = 01/03/2011 e .ctxt(1).text = 31/03/2011

Porem apartir do momento que eu coloque um periodo anual q é a verdadeira funcionalidade do relatorios pra fazer balanço anual, ai ele não traz o programa da forma correta.

Ele me traz os subsetores um a um vou subir a imagem do relatorio para vocês verem.

O certo é o que faz o select de um unico mes RelCertoMes03.jpeg - https://docs.google.com/leaf?id=0B7BOn1qqQK...I2&hl=pt_BR

o errado é o que faz o select de varios meses RelErradomes 01 ao 03.jpeg - https://docs.google.com/leaf?id=0B7BOn1qqQK...Jk&hl=pt_BR

Bom desde já agradeço a ajuda de todos, valeu pessoal os links são do google docs.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

tente isso:

With FrmComp
    sql = "select pagar.subsetor,sum(pagar.valorpago) as vlrpago, DateSerial(Year(pagar.datapgto), Month(pagar.datapgto), 1) As datapagamento, setor.setor, setor.CODIGO from pagar inner join  setor on pagar.setor = setor.codigo "
    sql = sql & "WHERE DATAPGTO >= #" & Format(.Ctxt(0).Text, "mm/dd/yyyy") & "# "
    sql = sql & "AND DATAPGTO <= #" & Format(.Ctxt(1).Text, "mm/dd/yyyy") & "#"
    sql = sql & "and SITUAÇAO LIKE '" & "Pag" & "' "
    End With
    sql = sql & " group by pagar.subsetor, setor.setor, SETOR.CODIGO, DateSerial(Year(pagar.datapgto), Month(pagar.datapgto), 1) "
    sql = sql & " ORDER BY DateSerial(Year(pagar.datapgto), Month(pagar.datapgto), 1), pagar.subsetor"[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

kuroi, show de bola veja como ficou o relatorio

https://docs.google.com/leaf?id=0B7BOn1qqQK...Uz&hl=pt_BR

Olha só, sem querer abusar, mas o que você fez ali? prq não entendi é um tipo de formatação que pode ser feito dentro do sql?

cara de klker forma muito obrigado pela ajuda.

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

no codigo original, você tava agrupando por cada uma das datas, então, ele ia separar por todos os dias q aparecessem no banco.

então, como era pra ser por mes, eu mandei trocar todas as datas pelo dia 1 do proprio mes. exemplo, 02/02/2011 vira 01/02/2011. assim todas as datas do mes estariam no mesmo dia e ele não iria separar.

a funcao DateSerial() cria uma data com o ano, o mes e o dia passados por parametros.

assim, DateSerial(Year(pagar.datapgto), Month(pagar.datapgto), 1) vai trocar todas as datas pelo dia 1 do mesmo mes.

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo seu exemplo foi o mais próximo de resolver meu problema que eu encontrei, estou tentando fazer essa pesquisa em vb net, mas com dois datatimepicker

dtinicial e dtfinal, que deveria me retornar registros no entre os período selecionado.

a estrutura é:

Using con As OleDbConnection = GetConnection()
Try
con.Open()
Dim sql As String
sql = "SELECT DateSerial(Year(Orcamento.Data_Orca), Month(Orcamento.Data_Orca), 1), SUM(ValorTO_Orca)as Mensais "
sql += "FROM Orcamento GROUP BY DateSerial(Year(Orcamento.Data_Orca), Month(Orcamento.Data_Orca), 1) "
sql += "WHERE Orcamento.Data_Orca >= #" & Format(DtFinal.Text, "mm/dd/yyyy") & "# "
sql += "AND Orcamento.Data_Orca <= #" & Format(DtFinal.Text, "mm/dd/yyyy") & "#"
sql += "ORDER BY DateSerial(Year(Orcamento.Data_Orca), Month(Orcamento.Data_Orca), 1)"
Dim cmd As OleDbCommand = New OleDbCommand(sql, con)
Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
Dim dt As DataTable = New DataTable
da.Fill(dt)
dgvResumo.DataSource = dt
Catch ex As Exception
MsgBox(ex.Message)
Finally
con.Close()
End Try
End Using

End Sub

mas esta retornando um erro aparentemente basico:Erro de sintaxe (operador faltando) na expressão de consulta, cara já tentenei de tudo...

Pode me ajudar?

Por Favor rsrsrs...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...