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 ateno...

No estou usando nenhuma sentena condicional para chamar o cdigo.

chamado atraves de um boto ao abrir o formulrio.

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


San Roman

[]Por mais distncia que a tecnologia possa encurtar, nada mais prximo do que um abrao.[]
J.Pires


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

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


Na verdade eu quero que voc coloque o cdigo 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 cdigo 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 distncia que a tecnologia possa encurtar, nada mais prximo do que um abrao.[]
J.Pires


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

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


Voc j tentou rodar s esta parte da sentena, 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 no o valor por conta.

Notei que no INNER JOIN faziamos a juno 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 no, fico sem palavras para agradece-lo.

Espero sua resposta.



San Roman

[]Por mais distncia que a tecnologia possa encurtar, nada mais prximo do que um abrao.[]
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 no o valor por conta.

Notei que no INNER JOIN faziamos a juno 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 no, fico sem palavras para agradece-lo.

Espero sua resposta.



timo.
Eu passei um cdigo 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