none
Como faço essa instrução MySQL no vb.net RRS feed

  • Discussão Geral

  • Boa noite!

    Tenho na tabela finanças os campos de "recebimento" e "pagamento" em type=tinyint, "total" em type=decimal 19x2 e "datapagarecebe" type=date.

    Preciso coletar a seguinte informação: Total de pagamentos e o total de recebimentos no mês e mostrar os valores em uma label para cada total.

    Alguém pode me ajudar.

    Agradeço á atenção e ajuda.

    Ivo

    quinta-feira, 12 de abril de 2018 01:47

Todas as Respostas

  • Criei uma estrutura de exemplo com o seguinte código:

    CREATE TABLE financas(id INT NOT NULL auto_increment, 
                          recebimento tinyint, 
                          pagamento tinyint, 
                          total decimal(19,2), 
                          datapr date, 
                         PRIMARY KEY(id));
                         
    INSERT INTO financas(recebimento, pagamento, total, datapr)
    VALUES (1, 0, 5, '2018-01-01'),
           (1, 0, 10, '2018-01-03'),
           (0, 1, 8, '2018-01-05'),
           (1, 0, 4, '2018-02-11'),
           (1, 0, 1, '2018-02-13'),
           (0, 1, 1, '2018-02-15');

    E retornei o valor agrupado por mês/ano da seguinte forma:

    SELECT 
    SUM(CASE recebimento WHEN 1 THEN total ELSE 0 END) AS total_recebimento, 
    SUM(CASE pagamento WHEN 1 THEN total ELSE 0 END) AS total_pagamento,
    YEAR(datapr) AS ano, 
    MONTH(datapr) AS mes
    FROM financas
    GROUP BY YEAR(datapr), MONTH(datapr)

    Link para SQLFiddle: http://www.sqlfiddle.com/#!9/525b6c/1/0


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quinta-feira, 12 de abril de 2018 19:15
  • Ivo.... bom dia.

    Vc já tem algo pronto? Qual Banco de dados vc está utilizando? sql server? Mysql? Oracle?

    Como vc está acessando esse banco de dados? SqlCommand? Entity Framework?

    Uma dica... não use acentuação ou caracteres especiais no nome de tabelas ou campos.

    Sobre os totais. Vc pode calcular a consulta:

    SELECT SUM(recebimento) AS total_recebimento, SUM(pagamento) AS total_pagamento FROM financas WHERE DT BETWEEN '2018-04-01' AND '2018-04-30'

    Agora basta vc executar a consulta e capturar o retorno.


    Att, Lucio Rogerio


    Espero ter ajudado, se ajudei, por favor Vote como Útil, e se resolvi seu problema, clique em Marcar como Resposta.

    Boa noite Lúcio Rogério!

    Já tenho algo pronto, um BD em Mysql com a tabela financas. Estou utilizando comandos MysqlCommand e Entity Framework.

    Vou tentar sua sugestão e depois informo.

    Obrigado pela ajuda.


    • Editado ivofb sexta-feira, 13 de abril de 2018 22:12
    sexta-feira, 13 de abril de 2018 22:10
  • Criei uma estrutura de exemplo com o seguinte código:

    CREATE TABLE financas(id INT NOT NULL auto_increment, 
                          recebimento tinyint, 
                          pagamento tinyint, 
                          total decimal(19,2), 
                          datapr date, 
                         PRIMARY KEY(id));
                         
    INSERT INTO financas(recebimento, pagamento, total, datapr)
    VALUES (1, 0, 5, '2018-01-01'),
           (1, 0, 10, '2018-01-03'),
           (0, 1, 8, '2018-01-05'),
           (1, 0, 4, '2018-02-11'),
           (1, 0, 1, '2018-02-13'),
           (0, 1, 1, '2018-02-15');

    E retornei o valor agrupado por mês/ano da seguinte forma:

    SELECT 
    SUM(CASE recebimento WHEN 1 THEN total ELSE 0 END) AS total_recebimento, 
    SUM(CASE pagamento WHEN 1 THEN total ELSE 0 END) AS total_pagamento,
    YEAR(datapr) AS ano, 
    MONTH(datapr) AS mes
    FROM financas
    GROUP BY YEAR(datapr), MONTH(datapr)

    Link para SQLFiddle: http://www.sqlfiddle.com/#!9/525b6c/1/0


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    Boa noite Juliano Nunes!

    Vou tentar adaptar sua sugestão para ver se roda depois lhe informo.

    Obrigado pela ajuda.


    • Editado ivofb sexta-feira, 13 de abril de 2018 22:57
    sexta-feira, 13 de abril de 2018 22:11
  • Boa tarde Juliano Nunes!

    tentei usar sua instrução mas não aparece o valor dos recebimentos e dos pagamento não está vindo tudo... ele mostra R$1.871,12 sendo o que somei manualmente e está dando R$2.701,90. Segue código que usei:

     Using con As MySqlConnection = GetConnection()
                Try
                    con.Open()
                    Dim sql As String = "SELECT SUM(CASE Recebimento WHEN 1 THEN Total ELSE 0 END) AS RealizadosReceber, "
                    sql += "SUM(CASE Pagamento WHEN 1 THEN Total ELSE 0 END) AS RealizadosPagos, YEAR(Data) AS LblAno, MONTH"
                    sql += "(Data) AS LblMes FROM financas GROUP BY YEAR(Data), MONTH(Data)"
                    Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
                    Dim dr As MySqlDataReader
                    dr = cmd.ExecuteReader
                    While dr.Read
                        'Mostra resultado Realizados Recibidos
                        LblRealizadosReceber.Text = String.Format("{0:C2}", dr("RealizadosReceber"))
                        mlblVGrealizadoreceber.Text = LblRealizadosReceber.Text
                        'Mostra resultado Realizados Pagos
                        LblRealizadosPagos.Text = String.Format("{0:C2}", dr("RealizadosPagos"))
                        mlblVGrealizadopago.Text = LblRealizadosPagos.Text
                    End While
                Catch ex As Exception
                    MsgBox(ex.Message)
                    Finalize()
                    con.Clone()
                End Try
            End Using



    Se puder me ajudar ou se mais alguém puder eu agradeço.

    Ivo


    • Editado ivofb terça-feira, 17 de abril de 2018 22:01
    terça-feira, 17 de abril de 2018 18:59
  • Boa tarde Juliano Nunes!

    tentei usar sua instrução mas não aparece o valor dos recebimentos e dos pagamento não está vindo tudo... ele mostra R$1.871,12 sendo o que somei manualmente e está dando R$2.701,90. Segue código que usei:

     Using con As MySqlConnection = GetConnection()
                Try
                    con.Open()
                    Dim sql As String = "SELECT SUM(CASE Recebimento WHEN 1 THEN Total ELSE 0 END) AS RealizadosReceber, "
                    sql += "SUM(CASE Pagamento WHEN 1 THEN Total ELSE 0 END) AS RealizadosPagos, YEAR(Data) AS LblAno, MONTH"
                    sql += "(Data) AS LblMes FROM financas GROUP BY YEAR(Data), MONTH(Data)"
                    Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
                    Dim dr As MySqlDataReader
                    dr = cmd.ExecuteReader
                    While dr.Read
                        'Mostra resultado Realizados Recibidos
                        LblRealizadosReceber.Text = String.Format("{0:C2}", dr("RealizadosReceber"))
                        mlblVGrealizadoreceber.Text = LblRealizadosReceber.Text
                        'Mostra resultado Realizados Pagos
                        LblRealizadosPagos.Text = String.Format("{0:C2}", dr("RealizadosPagos"))
                        mlblVGrealizadopago.Text = LblRealizadosPagos.Text
                    End While
                Catch ex As Exception
                    MsgBox(ex.Message)
                    Finalize()
                    con.Clone()
                End Try
            End Using



    Se puder me ajudar ou se mais alguém puder eu agradeço.

    Ivo


    Olá Pessoal, será que mais alguém pode me ajudar.

    Fico grato.

    quinta-feira, 19 de abril de 2018 21:07