DbGrid com duas tabelas.. Dificuldade com Join
Boa tarde..
Tenho duas tabelas (access).
TblaMinhaCarteira 1º tabela
Id - autonumeração - chave primária
Acao: Texto
Ordem : Numero
Cotas: integer
TblaOrdensPendentes 2º tabela
Id - autonumeração - chave primária
Acao: Texto
IdLinkada: integer
Cotas : integer
Precisso apresentar no Dbgrid
Coluna - Acao - TblaMinhaCarteira pode ter varios registros da mesma Acao
Coluna - Total - este campo não existe no banco, mas terá que apresentar a soma de todas cotas da mesma Acao da tabela TblaMinhaCarteira .
Coluna - Disponivel - este campo não existe no banco, mas terá que apresentar as cotas(TblaMinhaCarteira) - soma das cotas (TblaOrdensPendentes) da IdLinkada
ou seja no campo IdLinkada da TblaOrdensPendentes sempre tera um registro linkado a Id da TblaMinhaCarteira
Cotas(TblaMinhaCarteira) - Cotas(TblaOrdensPendentes) que tenha Id e IdLinkada igual..
Tenho duas tabelas (access).
TblaMinhaCarteira 1º tabela
Id - autonumeração - chave primária
Acao: Texto
Ordem : Numero
Cotas: integer
TblaOrdensPendentes 2º tabela
Id - autonumeração - chave primária
Acao: Texto
IdLinkada: integer
Cotas : integer
Precisso apresentar no Dbgrid
Coluna - Acao - TblaMinhaCarteira pode ter varios registros da mesma Acao
Coluna - Total - este campo não existe no banco, mas terá que apresentar a soma de todas cotas da mesma Acao da tabela TblaMinhaCarteira .
Coluna - Disponivel - este campo não existe no banco, mas terá que apresentar as cotas(TblaMinhaCarteira) - soma das cotas (TblaOrdensPendentes) da IdLinkada
ou seja no campo IdLinkada da TblaOrdensPendentes sempre tera um registro linkado a Id da TblaMinhaCarteira
Cotas(TblaMinhaCarteira) - Cotas(TblaOrdensPendentes) que tenha Id e IdLinkada igual..
Freed
Curtidas 0
Respostas
Discorpio
26/05/2009
Boa noite FReed.
Tente assim:
Repare que eu fiz uma sub-consulta dentro de outra consulta, isto funciona em determindos dialetos do SQL, inclusive do Interbase ou Firebird
Tente assim:
Select TMC.acao, Sum(TMC.cotas) as Total_MCarteira, (Select Sum(TOP.cotas) From TblaOrdensPendentes Where TMC.id = TOP.id) as Total_OPendentes From TblaMinhaCarteira TMC Inner Join TblaOrdensPendentes TOP On TMC.id = TOP.id Groub by TMC.acao
Repare que eu fiz uma sub-consulta dentro de outra consulta, isto funciona em determindos dialetos do SQL, inclusive do Interbase ou Firebird
GOSTEI 0
Freed
26/05/2009
Grato pela resposta Discorpio...
Estou usando o banco do Access, a SQL apresentou erros na Clausula FROM, e para piorar a situação criei mais uma tabela TblaAcoes, dois campos Acao, Empresa..
Tabela 1 TblaMinhaCarteira
Id - autonumeração - chave primária
Acao: Texto
Ordem : Numero
Cotas: integer
Tabela 2 TblaOrdensPendentes
Id - autonumeração - chave primária
Acao: Texto
IdLinkada: integer
Cotas : integer
Tabela 3 TblaAcoes
Acao: Texto
Empresa: Texto
Colunas do DbGrid:
Acao | Empresa | Total | Ordem | Disponivel
Estou com este código, mas não retorna a soma e esta repetindo as IdLinkada
Ex de registros nas tabelas: A Sql acima ainda não retorna este resultado......
TblaMinhaCarteira 1º tabela
Id | Acao | Ordem | Cotas
1 | AA | 1111 | 40
2 | AA | 2222 | 30
3 | BB | 3333 |20
4 | CC | 4444 | 10
Somando as Acoa AA =70 , BB =20 e CC=10
TblaOrdensPendentes 2º tabela
Id | Acao | Cotas | IdLinkada
1 | AA | 10 | 1
2 | AA | 10 | 1
3 | AA |15 | 2
4 | BB | 15 | 3
TblaAcoes 3º Tabela
Acao | Empresa
AA | EMPRESA1
BB | EMPRESA2
CC| EMPRESA3
no grid terá que aparecer:
Acao | Empresa |Total | Ordem | Disponivel
AA |EMPRESA1| 70 | 1111 | 20
AA |EMPRESA1| 70 | 2222 | 15
BB | EMPRESA2|20 | 3333 | 5
CC |EMPRESA3 | 10 | 4444 | 10
Se algem identificar o problema na sql fico grato...
Estou usando o banco do Access, a SQL apresentou erros na Clausula FROM, e para piorar a situação criei mais uma tabela TblaAcoes, dois campos Acao, Empresa..
Tabela 1 TblaMinhaCarteira
Id - autonumeração - chave primária
Acao: Texto
Ordem : Numero
Cotas: integer
Tabela 2 TblaOrdensPendentes
Id - autonumeração - chave primária
Acao: Texto
IdLinkada: integer
Cotas : integer
Tabela 3 TblaAcoes
Acao: Texto
Empresa: Texto
Colunas do DbGrid:
Acao | Empresa | Total | Ordem | Disponivel
Estou com este código, mas não retorna a soma e esta repetindo as IdLinkada
SQL.Add(´Select C.*, A.Empresa, P.Disponivel´); SQL.Add(´FROM TblaMinhaCarteira C, TblaAcoes A, (SELECT IdLinkada,SUM(Cotas)AS Disponivel FROM TblaOrdensPendentes GROUP BY IdLinkada,Cotas) P´); SQL.Add(´WHERE C.Acao = A.Acao AND C.Id = P.IdLinkada);
Ex de registros nas tabelas: A Sql acima ainda não retorna este resultado......
TblaMinhaCarteira 1º tabela
Id | Acao | Ordem | Cotas
1 | AA | 1111 | 40
2 | AA | 2222 | 30
3 | BB | 3333 |20
4 | CC | 4444 | 10
Somando as Acoa AA =70 , BB =20 e CC=10
TblaOrdensPendentes 2º tabela
Id | Acao | Cotas | IdLinkada
1 | AA | 10 | 1
2 | AA | 10 | 1
3 | AA |15 | 2
4 | BB | 15 | 3
TblaAcoes 3º Tabela
Acao | Empresa
AA | EMPRESA1
BB | EMPRESA2
CC| EMPRESA3
no grid terá que aparecer:
Acao | Empresa |Total | Ordem | Disponivel
AA |EMPRESA1| 70 | 1111 | 20
AA |EMPRESA1| 70 | 2222 | 15
BB | EMPRESA2|20 | 3333 | 5
CC |EMPRESA3 | 10 | 4444 | 10
Se algem identificar o problema na sql fico grato...
GOSTEI 0
Freed
26/05/2009
Bom dia...
Sql abaixo chegou proximo ao desejado:
Pórém esta retornando a soma das IdLinkada, e deveria retornar Cotas menos este valor...
3º linha que esta comentada, deveria retornar o total de Cotas e esta dando erro...
No Dbgrid apareceu no titulo ´Expr1001 e Expr1002´ ao invés de Empresa e Pendentes, a clausula Grup By resolve isto?
Grato..
Sql abaixo chegou proximo ao desejado:
SQL.Add(´select C.*´); SQL.Add(´,(select A.Empresa FROM TblaAcoes A WHERE C.Acao = A.Acao )´); //GROUP BY A.Empresa SQL.Add(´,(select sum(P.cotas)AS Pendentes from TblaOrdensPendentes P WHERE C.Id = P.IdLinkada)´); //SQL.Add(´,(select sum(c.cotas)AS Total from c)´); SQL.Add(´from TblaMinhaCarteira C ´);
Pórém esta retornando a soma das IdLinkada, e deveria retornar Cotas menos este valor...
3º linha que esta comentada, deveria retornar o total de Cotas e esta dando erro...
No Dbgrid apareceu no titulo ´Expr1001 e Expr1002´ ao invés de Empresa e Pendentes, a clausula Grup By resolve isto?
Grato..
GOSTEI 0