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

Duvida com Select de 3 Tabelas


Roberto Valentim

Pergunta

Boa Tarde pessoal,

Estou com um pequeno problema em relação ao conhecimento que vocês possuem. :)

Possuo 3 Tabelas [Ordem, Executor e Servico], estou precisando pegar a soma do custo de Mão de obra (Tabela Executor) somada a soma do custo de todos os Materiais (Tabela Servico) onde o Status na Tabela Ordem seja igual a F e as informações sejam separadas pela Manutenção.

Exemplo:

Manutenção              Material+Homem Hora
----------------------  -------------------
INSPEÇÃO                            1315,15
PREVENTIVA                          1070,40
CORRETIVA                           4583,62
EMERGÊNCIA                           192,65
SEGURANÇA                           2055,49
PREDITIVA                           1548,20

Elaborei 2 consultas capturando as informações separadas e ao tentar unir-las o resultado é um valor obsurdamente maior do que somando o resultado das consultas separadas.

Por Exemplo:

1º Consulta = R$ 346,00

2º Consulta = R$ 1.567,00

União das Consultas = R$ 19.167,00...

pelo que pudo perceber a união das Consultas que fiz está pegando o valor da Mão de Obra e duplicando para os N Materiais que a tabela Servico possui

Relacionamentos

Quote

Ordem x Executor = Executor.CodOrd = Ordem.CodOrd

Ordem x Servico = Servico.CodOrd = Ordem.CodOrd

Informações das Tabelas

Ordem só pode ter 1 Registro para N Executor e N Servico

Exemplo:

Ordem

CodOrd = 1234

Texto = 'Teste'

Executor

CodOrd = 1234

CodExe = 987

Valor = 5,00

CodOrd = 1234

CodExe = 654

Valor = 7,50

Servico

CodOrd = 1234

CodSer = 147

Valor = 154,00 (Esse é o valor do Material)

CodOrd = 1234

CodSer = 258

Valor = 657,00 (Esse é o valor do Material)

CodOrd = 1234

CodSer = 369

Valor = 369,00 (Esse é o valor do Material)

Por favor, alguém poderia me dar um help?

Obrigado pela Atenção.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Roberto.

Não sei se entendi o problema ao certo, mas vamos lá!!

De acordo com os dados que passou no exemplo, se você fizer o join entre as 3 tabelas, irá exponencializar o resultado.

você terá q fazer o select em separado, fazendo o join entre Ordem x Executor e Ordem x Servico.

Fiz uns testes no Sql, q estão abaixo. Roda ai e depois me fala se é isso mesmo q estava querendo....

Criei as temporárias de acordo com o exemplo, inseri os dados e fiz o select. No script tem alguns comentários. Espero que ajude, ok?

-- executa uma vez, pra criar a tabela na instância.

create table #Ordem (CodOrd int, Texto varchar(30))

create table #Executor (CodOrd int, CodExe int, Valor float)

create table #Servico (CodOrd int, CodSer int, Valor float)

-- inserção dos dados q passou no exemplo.

insert into #Ordem (CodOrd, Texto) values (1234, 'Teste')

insert into #Executor (CodOrd, CodExe, Valor) values (1234, 987, 5)

insert into #Executor (CodOrd, CodExe, Valor) values (1234, 654, 7.5)

insert into #Servico (CodOrd, CodSer, Valor) values (1234, 147, 154)

insert into #Servico (CodOrd, CodSer, Valor) values (1234, 258, 657)

insert into #Servico (CodOrd, CodSer, Valor) values (1234, 369, 369)

-- duplicidade das informações

select sum(e.valor), sum(s.valor) from #Executor e, #Servico s, #Ordem o

where o.CodOrd=1234 and o.CodOrd=e.CodOrd and o.CodOrd=s.CodOrd

-- select separado, utilizando subselect

select o.Texto, o.CodOrd,

(select sum(valor) FROM #Executor where CodOrd=o.CodOrd) as TotalExecutor,

(select sum(valor) FROM #Servico where CodOrd=o.CodOrd) as TotalServico,

((select sum(valor) FROM #Executor where CodOrd=o.CodOrd)+(select sum(valor) FROM #Servico where CodOrd=o.CodOrd))

as SomaExecutorServico

from #Ordem o where o.CodOrd=1234

-- and o.Status='F' - ai você coloca as clausulas, de acordo com a estrutura

Link para o comentário
Compartilhar em outros sites

  • 0

O sql ficou um pouco grande mesmo, mas pra retirar a duplicidade você teria q remodelar a base.... :.(

A remodelagem é bem desgastante, pois necessita de alterações em várias partes do fonte. Mas vai ai uma idéia...

Os relacionamentos irão depender das regras de negócio. No exemplo abaixo, modelei para que tenha Executor sem Serviço. De acordo com o exemplo que passou, isso pode ocorrer... mantive a mesma idéia. Neste caso em específico, o resultado é o mesmo.

Abaixo está um exemplo dos scripts. Espero ter ajudado. :.)

-- executa uma vez, pra criar a tabela na instância.

create table #Ordem (CodOrd int, Texto varchar(30))

create table #Servico (CodOrd int, CodSer int, Valor float)

create table #Executor (CodSer int, CodExe int, Valor float)

-- inserção dos dados q passou no exemplo.

insert into #Ordem (CodOrd, Texto) values (1234, 'Teste')

insert into #Servico (CodOrd, CodSer, Valor) values (1234, 147, 154)

insert into #Servico (CodOrd, CodSer, Valor) values (1234, 258, 657)

insert into #Servico (CodOrd, CodSer, Valor) values (1234, 369, 369)

insert into #Executor (CodSer, CodExe, Valor) values (258, 987, 5)

insert into #Executor (CodSer, CodExe, Valor) values (369, 654, 7.5)

select sum(e.valor), sum(s.valor) from #Ordem o left join #Servico s on o.CodOrd=s.CodOrd

left join #Executor e on s.CodSer=e.CodSer where o.CodOrd=1234

Link para o comentário
Compartilhar em outros sites

  • 0

Realmente ficou menor, é que na verdade eu só coloquei um resumo do que estou tentanto fazer... o real é mais complexo ainda... se você tiver interese em ver completo é só me avisar que eu posto aqui toda a tabela e seus relacionamentos é o que eu estou tentanto fazer que é Calcular os gastos com Mão de Obra e Materiais por tipo de Manutenção.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...