Retornar valor máximo de uma coluna.

02/02/2015

Bom dia

POR FAVOR


Segue o codigo e a tabela. O caso é o seguinte, preciso juntar 3 tabelas, a de produtos (uma quarta) nao precisa porem ela retorna apenas o código estruturado que é irrelevante.

O problemas esta na ordem de produção que sai com linha duplicada, dentro da tabela do select abaixo


SELECT * FROM OPER_ORD_PRODUC_FUNC WHERE OrdProducNum = '0000000242'

EmpCod OrdProducNum ProdCodEstr ProdOperSeq OperOrdProducSeq FuncCod OperOrdProducFuncApont
1.04 0000000242 0001.0001.0001.0012.0003 10 801 0000055 Sim
1.04 0000000242 0001.0001.0001.0012.0003 10 802 0000055 Sim


Eu sei o que eu preciso, porem nao sei como faço. A idéia é que ele me retorne apenas o numero MAX ou MIN da coluna OperOrdProducSeq pertencente a tabela OPER_ORD_PRODUC. (OOP).

Eu reduzi o código para ficar visível o problema


Select OOP.EmpCod, OPF.OperOrdProducSeq, FuncNome, OOP.ProdOperSeq, OperOrdProducStat, OOP.OrdProducNum, OperOrdProducDataHorainic,
OperOrdProducDataHoraFim, P.ProdNome, OOP.OperOrdProducQtdBoa, p.ProdCodAlt, OOP.OperOrdProducQtdCalc

From

FUNCIONARIO F With(Nolock)
Left OUTER JOIN OPER_ORD_PRODUC_FUNC OPF With(NoLock) ON F.FuncCod = OPF.FuncCod
Left OUTER JOIN OPER_ORD_PRODUC OOP With(NoLock) ON OOP.OrdProducNum = OPF.OrdProducNum
LEFT OUTER JOIN PRODUTO p WITH(NOLOCK) ON OOP.ProdCodEstr = p.ProdCodEstr

WHERE OOP.OrdProducNum = '0000000242' AND oop.EmpCod = '1.04'

AND OOP.OperOrdProducQtdBoa !='0.000000000'

Retorna Resultado:

EmpCod OperOrdProducSeq FuncNome ProdOperSeq OperOrdProducStat OrdProducNum OperOrdProducDataHorainic OperOrdProducDataHoraFim ProdNome OperOrdProducQtdBoa ProdCodAlt OperOrdProducQtdCalc

1.04 801 SERGIO N DO NASCIMENTO JUNIOR 10 Finalizada Total 0000000242 2015-01-14 08:20:00.000 2015-01-16 08:20:00.000 INCUBADORA BOD COM FOTOPERIODO E ALTERNANCIA DE TEMPERATURA 2.000000000 LUCA-161/03 2.000000000
1.04 802 SERGIO N DO NASCIMENTO JUNIOR 10 Finalizada Total 0000000242 2015-01-14 08:20:00.000 2015-01-16 08:20:00.000 INCUBADORA BOD COM FOTOPERIODO E ALTERNANCIA DE TEMPERATURA 2.000000000 LUCA-161/03 2.000000000


PRECISO TIRAR A MAX OU A MINIMA DA SEGUNDA COLUNA (OPF.OperOrdProducSeq) , TANTO FAZ se maximo ou minimo, preciso que apenas 1 campo seja mostrado, e com max e min eu tenho certeza que se tiver 10, vai aparecer 1 só, uma vez que OPERORDPRODUCSEQ é tipo uma PKey.

1.04 801 SERGIO N DO NASCIMENTO JUNIOR
1.04 802 SERGIO N DO NASCIMENTO JUNIOR




O código todo é esse:

Select OOP.EmpCod, OPf.OperOrdProducSeq, FuncNome, OOP.ProdOperSeq, OperOrdProducStat, OOP.OrdProducNum, OperOrdProducDataHorainic, OperOrdProducDataHoraFim, P.ProdNome, OOP.OperOrdProducQtdBoa, p.ProdCodAlt, OOP.OperOrdProducQtdCalc

From

FUNCIONARIO F With(Nolock)
Left OUTER JOIN OPER_ORD_PRODUC_FUNC OPF With(NoLock) ON F.FuncCod = OPF.FuncCod
Left OUTER JOIN OPER_ORD_PRODUC OOP With(NoLock) ON OOP.OrdProducNum = OPF.OrdProducNum
LEFT OUTER JOIN PRODUTO p WITH(NOLOCK) ON OOP.ProdCodEstr = p.ProdCodEstr

WHERE

CONVERT(DATETIME, CONVERT(VARCHAR(10), OperOrdProducDataHorainic, 120)) >= :dDataI
AND CONVERT(DATETIME, CONVERT(VARCHAR(10), OperOrdProducDataHoraFim, 120)) <= :dDataF
AND OOP.ProdCodEstr = P.ProdCodEstr
AND (OOP.EmpCod = :EMPRESA OR :EMPRESA = '')
AND (OOP.ProdOperSeq = :OPERACAO OR :OPERACAO = '')
AND (F.FuncCod = :FUNCIONARIO OR :FUNCIONARIO = '')
AND OOP.OperOrdProducStat = 'Finalizada Total'
AND OOP.OperOrdProducQtdBoa IS NOT NULL
Order by OperOrdProducDataHoraInic



onde tem :NOME são filtros retirados de um XML

RETORNO

EmpCod OPf.OperOrdProducSeq FuncNome ProdOperSeq OperOrdProducStat OrdProducNum OperOrdProducDataHorainic OperOrdProducDataHoraFim ProdNome OperOrdProducQtdBoa ProdCodAlt OperOrdProducQtdCalc
1.01 108 TASSO ANDRE CORADI 10 Manual 0000000005 2013-06-18 17:12:00.000 2013-06-18 17:12:00.000 CAPELA DE EXAUSTAO DE GASES 1.000000000 LUCA-15 1.000000000
1.01 201 TASSO ANDRE CORADI 10 Manual 0000000007 2013-07-02 07:50:00.000 2013-07-02 07:50:00.000 CAPELA DE EXAUSTAO DE GASES 1.000000000 LUCA-10 1.000000000

Juliano Borges

Melhor resposta

02/02/2015

Select OOP.EmpCod, max(OPf.OperOrdProducSeq)OperOrdProducSeq, FuncNome,
OOP.ProdOperSeq, OperOrdProducStat, OOP.OrdProducNum,
OperOrdProducDataHorainic, OperOrdProducDataHoraFim,
P.ProdNome, OOP.OperOrdProducQtdBoa, p.ProdCodAlt, OOP.OperOrdProducQtdCalc

From

FUNCIONARIO F With(Nolock)
Left OUTER JOIN OPER_ORD_PRODUC_FUNC OPF With(NoLock) ON F.FuncCod = OPF.FuncCod
Left OUTER JOIN OPER_ORD_PRODUC OOP With(NoLock) ON OOP.OrdProducNum = OPF.OrdProducNum
LEFT OUTER JOIN PRODUTO p WITH(NOLOCK) ON OOP.ProdCodEstr = p.ProdCodEstr

WHERE

CONVERT(DATETIME, CONVERT(VARCHAR(10), OperOrdProducDataHorainic, 120)) >= :dDataI
AND CONVERT(DATETIME, CONVERT(VARCHAR(10), OperOrdProducDataHoraFim, 120)) <= :dDataF
AND OOP.ProdCodEstr = P.ProdCodEstr
AND (OOP.EmpCod = :EMPRESA OR :EMPRESA = '')
AND (OOP.ProdOperSeq = :OPERACAO OR :OPERACAO = '')
AND (F.FuncCod = :FUNCIONARIO OR :FUNCIONARIO = '')
AND OOP.OperOrdProducStat = 'Finalizada Total'
AND OOP.OperOrdProducQtdBoa IS NOT NULL
group by
OOP.EmpCod, FuncNome,
OOP.ProdOperSeq, OperOrdProducStat, OOP.OrdProducNum,
OperOrdProducDataHorainic, OperOrdProducDataHoraFim,
P.ProdNome, OOP.OperOrdProducQtdBoa, p.ProdCodAlt, OOP.OperOrdProducQtdCalc
Order by OperOrdProducDataHoraInic

Isaac Jose

Responder Citar

Outras Respostas

02/02/2015

Juliano Borges

Amigão, você vai pro céu!

MUITO MUITO AGRADECIDO!
Responder Citar

02/02/2015

Isaac Jose

por nada precisando é so dar um grito que alguem por aqui ajuda..

abs....
Responder Citar

02/02/2015

Isaac Jose

por nada precisando é so dar um grito que alguem por aqui ajuda..

abs....
Responder Citar