Array
(
)

SELECT ESPECÍFICOS DE TABELAS RELACIONADAS.

Herbert Souza
   - 15 jan 2015

Preciso de ajuda !!!!!!
Preciso fazer um relatório, e ainda não domino SQL , estou usando o SQL Server
Tenho várias tabelas com milhões de linhas, preciso de dados de algumas dessas tabelas, eu sempre usei o SGBD MySql e agora estou apanhando um pouco no SQL Server.
Seriam dados de equipamentos consertados, cada equipamento tem um número de série (idObj), e uma Ordem de Serviço (cdOS) e também o motivo do problema (dsproblema), montei esse select:
select obj.idObj1,loteobj.cdOS , problemaat.dsProblema
from obj,loteobj,OSItem, problemaat
where obj.cdtpobj = 136
and loteobj.cdObj = obj.cdObj
and OSItem .cdOS =LoteObj .cdOS
and problemaat.cdProblema = OSItem .cdProblema
order by obj.idObj1
Ele traz esses três campos, porém cada peça(idobj1) pode apresentar mais de um problema e o sistema adiciona na mesma tabela, DESSA FORMA : Clique na imagem para abrir em uma nova janela.

Porém eu preciso acrescentar mais um campo que é a data em que o reparo foi feito, que está em uma outra tabela chamada osItemProd o campo chama dtfim.
Eu preciso acresentar esse campo, relacionando com os dados que já tem nesse select, pois ele relaciona o numero de série, OS, E o problema.
porém a consulta toda dá em torno de 752687 linhas, para eliminar algumas linhas eu preciso trazer o dado somente da Ordem serviço (cdOS) MAIOR, ou seja preciso selecionar a data de reparo só da ultima OS, que seria a maior OS, pois é em ordem crescente.
Espero que tenha ficado claro, preciso muito de ajuda.. se alguém tiver uma luz de como fazer.
sei que vou ter que usar algo como group by, having...
mas não sei como aplicar.

Isaac Jose
   - 15 jan 2015

boa tarde vc vai criar uma tabela a parte para fazer o relatorio?
se for e é o que aconselho pois relatorios devem ter a menor quantidade de instruções possivel..
aconselho a criar a tabela para o relatorio que vc tem depois cria o campo para receber essa max os e faz update dele

segue um exemplo que eu tenho que faz o calculo de perc para vc ter como base
update a
set a.perc = c.perc
from relatorios.Tb_AcumProd_PFPJ_Dia_Por_Produto_VR a
inner join (select b.Coddep,b.BintAno,b.tintMes,b.Dia,b.Produto
,(MAX(ValorAcum)/(meta*QtdDiaMes)*100) as perc
from relatorios.Tb_AcumProd_PFPJ_Dia_Por_Produto_VR b
group by b.Coddep,b.BintAno,b.tintMes,b.Dia,b.Produto,QtdDiaMes ,Meta)as c on
a.Coddep = c.coddep and a.BintAno = c.BintAno and a.tintMes = c.tintMes
and a.Dia = c.Dia and a.Produto = c.Produto

espero que ajude. estou atrasado aqui se nao explicava melhor abraços

Herbert Souza
   - 16 jan 2015

Obrigado Isaac Consegui resolver!! =D

Isaac Jose
   - 16 jan 2015

que bom espero que o exemplo tenha ajudadoo :)

Herbert Souza
   - 16 jan 2015

E Ajudou =D