INNER JOIN COM 3 TABELAS E SOMA DE CAMPOS

 Tópico anterior Próximo tópico Novo tópico

INNER JOIN COM 3 TABELAS E SOMA DE CAMPOS

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#481467 - 05/05/2018 09:46:58

SANROMAN
MONGAGUA
Cadast. em:Setembro/2013


Bom dia GUIMORAES

E muito obrigado pela atenção...

Não estou usando nenhuma sentença condicional para chamar o código.

É chamado atraves de um botão ao abrir o formulário.

Espero que seja isso que estas a me perguntar. Se não, me desculpe pela falta de conhecimento.


San Roman

"Por mais distância que a tecnologia possa encurtar, nada é mais próximo do que um abraço."
J.Pires


#481468 - 05/05/2018 09:56:59

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


Na verdade eu quero que você coloque o código sql que você está usando, para que eu possa te ajudar, como o exemplo que eu coloquei anteriormente.



#481469 - 05/05/2018 10:04:06

SANROMAN
MONGAGUA
Cadast. em:Setembro/2013


O código é o seguinte:

  Private Sub preencheDgvContaMes()

        Using con As FbConnection = conectarFirebird()

            con.Open()

            Try
                Using strCom As FbCommand = New FbCommand("SELECT conta, SUM(receita) AS receita, SUM(despesas) AS despesas " & _
                                                          "FROM (SELECT a.Conta, SUM(b.Valor) AS receita, 0 AS despesas " & _
                                                          "FROM tbConta AS a " & _
                                                          "INNER JOIN tbReceita AS b ON b.Login = a.Login " & _
                                                          "WHERE EXTRACT(MONTH FROM b.DataMovimento) = @mes " & _
                                                          "AND EXTRACT(YEAR FROM b.DataMovimento) = @ano " & _
                                                          "AND a.Titular = @titular " & _
                                                          "AND a.Login = @login " & _
                                                          "GROUP BY a.Conta " & _
                                                          "UNION ALL " & _
                                                          "SELECT a.Conta, 0 AS receita, SUM(c.Valor) AS despesas " & _
                                                          "FROM tbConta AS a " & _
                                                          "INNER JOIN tbDespesa AS c ON c.Login = a.Login " & _
                                                          "WHERE EXTRACT(MONTH FROM c.DataMovimento) = @mes " & _
                                                          "AND EXTRACT(YEAR FROM c.DataMovimento) = @ano " & _
                                                          "AND a.Titular = @titular " & _
                                                          "AND a.Login = @login " & _
                                                          "GROUP BY a.Conta) " & _
                                                          "GROUP BY conta", con)

                    strCom.Parameters.AddWithValue("@mes", frmPrincipal.txtMesRef.Text)
                    strCom.Parameters.AddWithValue("@ano", frmPrincipal.txtAnoRef.Text)
                    strCom.Parameters.AddWithValue("@titular", frmLogin.txtNome.Text)
                    strCom.Parameters.AddWithValue("@login", frmLogin.cbNome.Text)

                    Using da As FbDataAdapter = New FbDataAdapter(strCom)

                        Dim dt As DataTable = New DataTable("Receita")
                        Dim ds As DataSet = New DataSet

                        dgvTotalConta.Columns.Clear()
                        da.Fill(ds)

                        With dgvTotalConta

                            .DefaultCellStyle.Font = New Font("Arial", 8, FontStyle.Regular)
                            .ColumnHeadersDefaultCellStyle.Font = New Font("Arial", 8, FontStyle.Regular)
                            .GridColor = Color.LightGray
                            .BorderStyle = BorderStyle.Fixed3D
                            .RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
                            .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
                            .RowHeadersVisible = False
                            .BackgroundColor = Color.White
                            .ColumnCount = 4
                            .AutoGenerateColumns = False
                            .Columns(0).Name = "Conta"
                            .Columns(1).Name = "Receita"
                            .Columns(2).Name = "Despesa"
                            .Columns(0).Width = 120
                            .Columns(1).Width = 100
                            .Columns(2).Width = 100
                            .Columns(1).DefaultCellStyle.Format = "N"
                            .Columns(2).DefaultCellStyle.Format = "N"
                            .Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                            .Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                            .Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                            .AllowUserToAddRows = False
                            .AllowUserToDeleteRows = False
                            .AllowUserToOrderColumns = False
                            .AllowUserToResizeColumns = False
                            .AllowUserToResizeRows = False

                        End With

                        dt = ds.Tables(0)

                        For Each linha As DataRow In dt.Rows
                            dgvTotalConta.Rows.Add(linha(0), linha(1), linha(2))
                        Next

                    End Using
                End Using

            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try

        End Using

    End Sub


San Roman

"Por mais distância que a tecnologia possa encurtar, nada é mais próximo do que um abraço."
J.Pires


#481471 - 05/05/2018 11:41:03

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


Você já tentou rodar só esta parte da sentença, para ver o resultado?

  

"SELECT a.Conta, 0 AS receita, SUM(c.Valor) AS despesas " & _
                                                          "FROM tbConta AS a " & _
                                                          "INNER JOIN tbDespesa AS c ON c.Login = a.Login " & _
                                                          "WHERE EXTRACT(MONTH FROM c.DataMovimento) = @mes " & _
                                                          "AND EXTRACT(YEAR FROM c.DataMovimento) = @ano " & _
                                                          "AND a.Titular = @titular " & _
                                                          "AND a.Login = @login " & _
                                                          "GROUP BY a.Conta




#481472 - 05/05/2018 12:24:48

SANROMAN
MONGAGUA
Cadast. em:Setembro/2013


Acabei de rodar e da o valor total de receitas e não o valor por conta.

Notei que no INNER JOIN faziamos a junção da seguinte forma:

"INNER JOIN tbReceita AS b ON b.Login = a.Login " & _
"INNER JOIN tbDespesa AS b ON c.Login = a.Login " & _


Troquei para:

"INNER JOIN tbReceita AS b ON b.Conta = a.Conta " & _
"INNER JOIN tbDespesa AS b ON c.Conta = a.Conta " & _

E EUREKA funcionou perfeitamente.

Se estiver errado, por favor, me auxilie.

Se não, fico sem palavras para agradece-lo.

Espero sua resposta.



San Roman

"Por mais distância que a tecnologia possa encurtar, nada é mais próximo do que um abraço."
J.Pires


#481488 - 07/05/2018 09:18:32

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


Citação:
:
Acabei de rodar e da o valor total de receitas e não o valor por conta.

Notei que no INNER JOIN faziamos a junção da seguinte forma:

"INNER JOIN tbReceita AS b ON b.Login = a.Login " & _
"INNER JOIN tbDespesa AS b ON c.Login = a.Login " & _


Troquei para:

"INNER JOIN tbReceita AS b ON b.Conta = a.Conta " & _
"INNER JOIN tbDespesa AS b ON c.Conta = a.Conta " & _

E EUREKA funcionou perfeitamente.

Se estiver errado, por favor, me auxilie.

Se não, fico sem palavras para agradece-lo.

Espero sua resposta.



Ótimo.
Eu passei um código de exemplo, para que você pudesse entender o contexto e aplicar o mesmo a sua necessidade. Se você chegou ao resultado que esperava, quer dizer que está correto.




 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário