Fórum DbGrid com duas tabelas.. Dificuldade com Join #370787

26/05/2009

0

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


Freed

Freed

Responder

Posts

28/05/2009

Discorpio

Boa noite FReed.

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


Responder

Gostei + 0

29/05/2009

Freed

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


Responder

Gostei + 0

29/05/2009

Freed

Bom dia...

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar