AJUDA COM UM SELECT COM SUBSELECT

SQL

Oracle

Delphi

Oracle PL SQL

06/07/2021

Olá, colegas espero que esteja ótimo.

Gostaria de uma ajuda com um select que fiz esse select está retornando a mensagem a baixo mais não vejo onde está errado poderia me ajudar ?

Msg : ORA-01427: A SUBCONSULTA DE UMA ÚNICA LINHA RETORNA MAIS DE UMA LINHA.


with tmp_veiculos as
(select vc.cod_produto
,vc.cod_modelo
,vc.chassi_resumido
,vc.chassi_completo
,vc.data_entrada
,vc.data_emplacamento
from veiculos vc)
select t.cod_empresa
, t.ficha_numero
, t.cod_proposta
, t.data_hoje
, t.empresa_nome
, t.cliente_nome
, t.nome
, t.vendedor_nome
, t.pedido_numero
, t.cod_produto
, t.familia_descricao
, t.cod_modelo
, t.modelo_descricao
, t.chassi_completo
, to_date(t.estoque_data, ''''DD/MM/RRRR'''') as estoque_data
, to_date(t.pedido_emissao, ''''DD/MM/RRRR'''') as pedido_emissao
, t.recurso_proprio
, t.recurso_financiado
, t.recurso_leasing
, t.recurso_consorcio
, t.recurso_usado
, to_date(t.reserva_data, ''''DD/MM/RRRR'''') as reserva_data
, to_date(t.aprovacao_data, ''''DD/MM/RRRR'''') as aprovacao_data
, to_date(t.faturamento_previsao, ''''DD/MM/RRRR'''') as faturamento_previsao
, to_date(t.faturamento_data, ''''DD/MM/RRRR'''') as faturamento_data
, to_date(t.faturamento_cancel, ''''DD/MM/RRRR'''') as faturamento_cancel
, t.faturamento_novo
, to_date(t.pedido_cancelamento, ''''DD/MM/RRRR'''') as pedido_cancelamento
, t.fatura_devolucao
, to_date(t.emplacamento_previsao, ''''DD/MM/RRRR'''') as emplacamento_previsao
, to_date(t.emplacamento_data, ''''DD/MM/RRRR'''') as emplacamento_data

, t.pri_os_numero_os
, to_date(t.pri_os_emissao_data, ''''DD/MM/RRRR'''') as pri_os_emissao_data
, to_date(t.pri_os_prev_encerramento, ''''DD/MM/RRRR'''') as pri_os_prev_encerramento
, to_date(t.pri_os_encerramento_data, ''''DD/MM/RRRR'''') as pri_os_encerramento_data

, t.ult_os_numero_os
, to_date(t.ult_os_emissao_data, ''''DD/MM/RRRR'''') as ult_os_emissao_data
, to_date(t.ult_os_prev_encerramento, ''''DD/MM/RRRR'''') as ult_os_prev_encerramento
, to_date(t.ult_os_encerramento_data, ''''DD/MM/RRRR'''') as ult_os_encerramento_data
, t.os_quantidade
, t.previsaoFO

, t.veiculo_interesse
, t.filial_entrega
, to_date(t.data_baixa, ''''DD/MM/RRRR'''') as data_baixa
, t.cond_pagamento
, t.tentativa1
, t.tentativa2
, t.tentativa3

from
(
select ce.cod_empresa
, ce.cod_evento as ficha_numero
, vp.cod_proposta
,to_char(sysdate, ''''DD/MM/RRRR HH24:MI:SS'''') as data_hoje

,(select nome
from empresas e
where e.cod_empresa = ce.cod_empresa) as empresa_nome

, (select nome
from clientes cl
where cl.cod_cliente = ce.cod_cliente) as cliente_nome

, eu.nome
, eu.nome_completo as vendedor_nome
, vp.cod_proposta as pedido_numero
, pm.cod_produto
, pd.descricao_produto as familia_descricao
, pm.cod_modelo
, pm.descricao_modelo as modelo_descricao
, vc.chassi_completo
, vc.data_entrada as estoque_data
, vp.emissao as pedido_emissao
, ce.entrada as recurso_proprio
, case
when ce.fi_tipo_financiamento = ''''C'''' then ce.fi_valor_financiado
else 0
end as recurso_financiado

, case
when ce.fi_tipo_financiamento = ''''L'''' then ce.fi_valor_financiado
else 0
end as recurso_leasing
, 0 as recurso_consorcio

, nvl((select sum(nvl(fu.avaliacao_aprovada, 0) -
(nvl(fu.troco, 0) + nvl(fu.troco_banco_valor, 0)))
from fu_usados fu -- cod_empresa, cod_avaliacao
where fu.cod_empresa = ce.cod_empresa
and fu.cod_avaliacao = ce.cod_avaliacao), 0) as recurso_usado

, vp.data_reserva as reserva_data
, vp.data_aprovacao as aprovacao_data
, ce.data_prevista_compra as faturamento_previsao

, vp.data_venda as faturamento_data

, (select vdc.data
from vendas vd inner join
vendas_cancelamento vdc on vdc.cod_empresa = vd.cod_empresa
and vdc.controle = vd.controle
and vdc.serie = vd.serie
where vd.cod_produto = vp.cod_produto
and vd.cod_modelo = vp.cod_modelo
and vd.chassi_resumido = vp.chassi_resumido
and vd.cod_proposta = vp.cod_proposta) as faturamento_cancel

, '''''''' as faturamento_novo
, vp.data_cancelamento as pedido_cancelamento
, '''''''' as fatura_devolucao
, vp.data_previsao_emplacamento as emplacamento_previsao
, vc.data_emplacamento as emplacamento_data

-- primeira os

, (select min(eov.numero_os)
from toyota_rel_entrega_os_veiculos eov
where eov.chassi = vc.chassi_completo
and nvl(eov.tipo_fabrica, '''' '''') in (''''CAI'''', ''''IAC'''', ''''IAN'''', ''''IAS'''', ''''IAU'''')
and eov.numero_os > 0
) as pri_os_numero_os

, (select min(eov.data_emissao)
from toyota_rel_entrega_os_veiculos eov
where eov.chassi = vc.chassi_completo
and nvl(eov.tipo_fabrica, '''' '''') in (''''CAI'''', ''''IAC'''', ''''IAN'''', ''''IAS'''', ''''IAU'''')
and eov.numero_os > 0
) as pri_os_emissao_data

, (select min(nvl(eov.data_prometida_revisada, eov.data_prometida))
from toyota_rel_entrega_os_veiculos eov
where eov.chassi = vc.chassi_completo
and nvl(eov.tipo_fabrica, '''' '''') in (''''CAI'''', ''''IAC'''', ''''IAN'''', ''''IAS'''', ''''IAU'''')
and eov.numero_os > 0
) as pri_os_prev_encerramento

, (select min(eov.data_encerrada)
from toyota_rel_entrega_os_veiculos eov
where eov.chassi = vc.chassi_completo
and nvl(eov.tipo_fabrica, '''' '''') in (''''CAI'''', ''''IAC'''', ''''IAN'''', ''''IAS'''', ''''IAU'''')
and eov.numero_os > 0
) as pri_os_encerramento_data

-- ultima os

, (select max(eov.numero_os)
from toyota_rel_entrega_os_veiculos eov
where eov.chassi = vc.chassi_completo
and nvl(eov.tipo_fabrica, '''' '''') in (''''CAI'''', ''''IAC'''', ''''IAN'''', ''''IAS'''', ''''IAU'''')
and eov.numero_os > 0
) as ult_os_numero_os

, (select max(eov.data_emissao)
from toyota_rel_entrega_os_veiculos eov
where eov.chassi = vc.chassi_completo
and nvl(eov.tipo_fabrica, '''' '''') in (''''CAI'''', ''''IAC'''', ''''IAN'''', ''''IAS'''', ''''IAU'''')
and eov.numero_os > 0
) as ult_os_emissao_data

, (select max(nvl(eov.data_prometida_revisada, eov.data_prometida))
from toyota_rel_entrega_os_veiculos eov
where eov.chassi = vc.chassi_completo
and nvl(eov.tipo_fabrica, '''' '''') in (''''CAI'''', ''''IAC'''', ''''IAN'''', ''''IAS'''', ''''IAU'''')
and eov.numero_os > 0
) as ult_os_prev_encerramento

, (select max(eov.data_encerrada)
from toyota_rel_entrega_os_veiculos eov
where eov.chassi = vc.chassi_completo
and nvl(eov.tipo_fabrica, '''' '''') in (''''CAI'''', ''''IAC'''', ''''IAN'''', ''''IAS'''', ''''IAU'''')
and eov.numero_os > 0
) as ult_os_encerramento_data

, (select count(eov.numero_os)
from toyota_rel_entrega_os_veiculos eo
Winicius

Winicius

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

06/07/2021

alguma subconsulta está retornando mais de um registro.
aquelas que usam funções de agregação (min, max, avg, count) estão corretas, mas talvez
 (select vdc.data
from vendas vd inner join
vendas_cancelamento vdc on vdc.cod_empresa = vd.cod_empresa
and vdc.controle = vd.controle
and vdc.serie = vd.serie
where vd.cod_produto = vp.cod_produto
and vd.cod_modelo = vp.cod_modelo
and vd.chassi_resumido = vp.chassi_resumido
and vd.cod_proposta = vp.cod_proposta)
esteja retornando dois ou mais registros
será preciso testar as sub consultas individualmente para saber qual está com problema.
GOSTEI 1

Mais Respostas

Winicius

Winicius

06/07/2021

Bom dia, Emerson Nascimento
Gostaria de agradecer ok, muito obrigado pela ajuda, fazendo o teste aqui hoje coloquei um ROWNUM = 1, funciono perfeitamente.
Vou deixa o select se alguem precisa ver está ai como fiz.
Muito obrigado mesmo.

(select vdc.data
from vendas vd inner join
vendas_cancelamento vdc on vdc.cod_empresa = vd.cod_empresa
and vdc.controle = vd.controle
and vdc.serie = vd.serie
where vd.cod_produto = vp.cod_produto
and vd.cod_modelo = vp.cod_modelo
and vd.chassi_resumido = vp.chassi_resumido
and vd.cod_proposta = vp.cod_proposta
and ROWNUM <= 1) as faturamento_cancel
GOSTEI 0
POSTAR