Update avançado contendo case/inner join/group by

Firebird

12/08/2015

Estou tentando fazer o update abaixo porem ao executar me retorna

multiple rows in singleton select.

E não estou conseguindo passar disso podem me ajudar??





UPDATE PRODUTO
SET PRODUTO.grupo2 = (SELECT case
WHEN (((ESTOQUELOTE.VALIDADE - CURRENT_DATE) <= 180) and (((ESTOQUELOTE.VALIDADE - CURRENT_DATE) > 0)) )
THEN '2'
WHEN ((ESTOQUELOTE.VALIDADE - CURRENT_DATE) > 0) and
((case when( ((sum(case when( (inf.NATOPERACAO in ('251','378','588','579','316','445','546')))
then ((inf.QTDE)* 1)
else ((inf.QTDE) * (0))
end)
+
sum(case when( (inf.NATOPERACAO in ('23','592','133','589')))
then ((inf.QTDE)* -1)
else ((inf.QTDE) * (0))
end) )/ 365) <= '0')
then '0'
else CAST(ROUND(( PRODUTO.ESTATUAL / ((sum(case when( (inf.NATOPERACAO in ('251','378','588','579','316','445','546')))
then ((inf.QTDE)* 1)
else ((inf.QTDE) * (0))
end)
+
sum(case when( (inf.NATOPERACAO in ('23','592','133','589')))
then ((inf.QTDE)* -1)
else ((inf.QTDE) * (0))
end) )/ 365)) ,2) AS DECIMAL(12,2)) end) >= 360)
THEN '3'
WHEN ((ESTOQUELOTE.VALIDADE - CURRENT_DATE) > 0) and
(cores.CODIGO not in ('1'))
THEN '6'
ELSE '1' END
FROM inf
INNER join Produto on produto.codbarra = inf.codbarra
INNER JOIN CORES ON CORES.codigo = PRODUTO.codigo_cor
INNER JOIN ESTOQUELOTE ON ESTOQUELOTE.produto = inf.codprod
where (INF.DTEMISSAO >= '10.08.2014' and INF.DTEMISSAO <= '10.08.2015')
group by inf.codbarra, produto.CODBARRA, PRODUTO.DESCRICAO, ESTOQUELOTE.VALIDADE,PRODUTO.ESTATUAL, ESTOQUELOTE.QTDE,
ESTOQUELOTE.LOTE, produto.DTVENDA, cores.CODIGO)
Luis

Luis

Curtidas 0

Respostas

Luis

Luis

12/08/2015

?????????????
GOSTEI 0
Alisson Santos

Alisson Santos

12/08/2015

Boa noite Luis.
Esse erro é por que o que está executando está trazendo mais de um valor.
O correto é executar as rotinas separadas para ver qual está trazendo essa informação e tratar.
GOSTEI 0
Luis

Luis

12/08/2015

Obrigado entendi
GOSTEI 0
Alisson Santos

Alisson Santos

12/08/2015

O problema pode estar se seu primeiro select.
Executa ele separado.
GOSTEI 0
POSTAR