..:: MX Studio Fóruns ::..: me ajudem - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




ATENÇÃO

Para evitar posts desnecessários e que não influam para o andamento e desenvolvimento do fórum, clique aqui e leia todas as regras.
Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

me ajudem consulta bem complicada

#1 User is offline   brunoscholz 

  • Group: Membros
  • Posts: 1
  • Joined: 27-May 05

Posted 27 May 2005 - 05:24 PM

eu tenho uma tabela de clientes, uma tabela de parceiros e uma tabela de agentes...
os parceiros trabalham para a minha empresa e tem uma id, e os agentes trabalham para os parceiros,tem uma id propria e uma id_repres que os liga aos parceiros. os clientes sao sempre dos parceiros, diretamente ou atraves de seus agentes, cada contrato com os clientes tem uma id, uma id que indica quem fechou o contrato e pode ser de um parceiro ou de um agente, e um tipo 'a' ou 'p' completando a informaçao anterior.
eu preciso contar todos os clientes (diretos e indiretos) de todos os parceiros inclusive dos parceiros que tem 0 clientes.
eu cheguei nisso mas ainda tem alguns erros:
CREATE TEMPORARY TABLE parc(
id BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
cad INT( 6 ) UNSIGNED ZEROFILL DEFAULT '000000' NOT NULL ,
valor FLOAT( 10 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( id ));

CREATE TEMPORARY TABLE agent(
id BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
cad INT( 6 ) UNSIGNED ZEROFILL DEFAULT '000000' NOT NULL ,
valor FLOAT( 10 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( id ));

INSERT INTO parc
SELECT p.id, COUNT( * ) AS cont, SUM(REPLACE (c.vl_contrato,',','') )
FROM cadastros AS c, parceiros AS p
WHERE (UPPER( c.indic_tipo ) = 'P' AND c.indic_id = p.id AND UPPER( c.status ) <> 'NC')
GROUP BY p.id;

INSERT INTO agent
SELECT a.id_repres, COUNT( * ) AS cont, SUM(REPLACE (c.vl_contrato,',','') )
FROM cadastros AS c, agentes AS a, parceiros p
WHERE (UPPER( c.indic_tipo ) = 'A' AND c.indic_id = a.id AND UPPER( c.status ) <> 'NC'
AND a.id_repres = p.id)
GROUP BY a.id_repres;

SELECT p.id, p.contato AS contato,
@cp := IF ((p.id = parc.id), parc.cad, 0) AS parceiro,
@ca := IF ((p.id = agent.id)and(p.id <> parc.id), agent.cad, 0) AS agentes,
(@cp + @ca) AS total
FROM parceiros AS p, parc, agent
WHERE (p.id = parc.id) OR (p.id = agent.id)
GROUP BY p.id
ORDER BY p.id

esse codigo mostra a id do parceiro e dai mostra ou os contratos diretos do parceiro ou os indiretos, nunca os dois.
Por favor me ajudem...
0

#2 User is offline   anonymattos 

  • Group: Membros
  • Posts: 13
  • Joined: 08-June 05

Posted 10 June 2005 - 01:05 AM

Não tive tempo de pensar bem em sua tabela, mas reveja seu relacionamento. A principio pode estar faltando uma tabela "Contrato". Avalie a situação de fora, pense nas perguntas q deseja fazer para o BD e q resultados deseja obter, rabisque linhas e colunas ficticias com estes resultados e depois avalie o relacionamento entre eles. Se ainda estiver em dificuldades posso dar uma olhada com calma fina de semana, ok?
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic



Publicidade




1 User(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)