Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) select de varias tables


fcandrade

Pergunta

Ola pessoal estou tendo uma dificuldade enorme em criar a seguinte condicao, tenho q colocar o resultado de 3 tables em 1 unica query, mas ela esta me retornando o seguinte resultado:

cnpj - valor table 1 - valor table 2 - valor table 3

x1 10,00 0,00 0,00

x1 0,00 15,00 0,00

x1 0,00 0,00 20,00

quando na realidade eu preciso q seja 1 unico registro

x1 10,00 15,00 20,00

o fator em comum em cada table é o campo cnpj, cada table é filtrado por cnpj e periodo de soma.Ex: sum(campo) as sum1, existe alguma forma de fazer essa query ?

Lembrando que seriam varios registros ou seja varios cnpj

uso o mysql5 com delphi7 e ZeosLib

- Uma outra opcao seria usar subquery, mas como fazer esse procedimento eu não sei

Agradeco a ajuda de qualquer pessoa,

Francisco Carlos de Andrade

franciscocarlos65@hotmail.com

franciscoacao@hotmail.com

fcandrade@fcandradeinfor.com

Editado por fcandrade
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Oi, Francisco !

Verifique se a resposta que dei no post abaixo satisfaz sua necessidade

http://scriptbrasil.com.br/forum/index.php?showtopic=111392

Se não satisfizer, post novamente e avaliaremos outra solução.

att

Denis Courcy

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

  • 0
Oi, Francisco !

Verifique se a resposta que dei no post abaixo satisfaz sua necessidade

http://scriptbrasil.com.br/forum/index.php?showtopic=111392

Se não satisfizer, post novamente e avaliaremos outra solução.

att

Denis Courcy

Amigo, agradeco a intencao, mas veja bem a complexidade:

arquivo 1) dados cadastrais da empresa (cnpj,razaosocial)

arquivo 2) dados referente a notas fiscais de saida (cnpj,sum(vlrctb) as sm1)

arquivo 3) dados referente a notas fiscais de entrada (cnpj,sum(vlrctb) as sm2)

arquivo 4) dados referente a notas fiscais de servicos (cnpj,sum(vlrctb) as sm3)

o relatorio q preciso é

cnpj - razaosocial - vlr saidas - vlr entradas - vlr servicos

o q acontece é q eu não tenho os campos referentes as notas fiscais no meu arquivo de dados cadastrais da empresa, então como vou poder fazer uma busca em um campo q não existe ? ( no caso o arquivo 1 não tem os campos sm1,sm2,sm3 )

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Francisco !

Use uma tabela temporária em memória e faça seu relatório a partir dela.

CREATE TEMPORARY TABLE temp (
cnpj (conforme o tipo em sua tabela),
vltb1 double(14,2),
vltb2 double(14,2),
vltb3 double(14,2),
PRIMARY (cnpj)
)ENGINE = MEMORY;
Carrege os dados para ela
INSERT INTO temp (cnpj, vltb1, vltb2, vltb3)
SELECT STRAIGHT_JOIN t0.cnpj, SUM(t1.vlrctb) AS vltb1, SUM(t2.vlrctb) AS vltb2, SUM(t3.vlrctb) AS vltb3
FROM tabela0 t0
INNER JOIN tabela1 t1 ON t0.cnpj = t1.cnpj
INNER JOIN tabela2 t2 ON t0.cnpj = t2.cnpj
INNER JOIN tabela3 t1 ON t0.cnpj = t3.cnpj
GROUP BY cnpj;
use a tabela temp em seu relatorio
SELECT cnpj, SUM(vltb1), SUM(vltb2), SUM(vltb3)
FROM temp GROUP BY cnpj;
delete a tabela temporária para liberar memória.
DROP TABLE temp;

Nota: Só utilize a engine memory se você souber que a quantidade de dados a serem armazenados não ultrapassa uma quantidade de mória razoável para este processamento.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...