Sql- pegar data nula do pedido
24/08/2020
0
UZ134-VM DataPrevisao 27/08/2020
UZ230-VM DataPrevisao 28/08/2020
UZ234-VM DataPrevisao NULL
No pedido eu tenho esses itens. Como um item do pedido tem data null preciso pegar a data null, porém se todos itens tivessem data eu deveria pegar a maior dataprevisao.
A tabela que possui a DataPrevisao é a tabela opitens.
E preciso mostrar essa data ligando com a itensped, provavelmente numa temporária para depois ligar com outras tabelas para exibir a data de previsão por pedido. A data nula ou a maior se não tiver nula.
Bruno
Posts
25/08/2020
Emerson Nascimento
select it.pedido, max(case when opi2.pedido is null then opi.dataprevisao else null end) dataprevisao from itensped it left join opitens opi on (opi.pedido = it.pedido) and not (opi.dataprevisao is null) -- aqui lista registros com data de previsão left join opitens opi2 on (opi2.pedido = it.pedido) and (opi2.dataprevisao is null) -- aqui lista registros sem data de previsão [where ] group by it.pedido
25/08/2020
Bruno
,max (case
when it.Numero is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
from itensped it
left join opitens opi on opi.item = it.Item and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
where it.Numero in (2787617,2787388)
group by it.Numero
fiz assim mas traz sempre null e um desse numeros de pedido deveria trazer a maior data. O número do pedido está apenas na itensped.
Segue todo o código:
select it.Numero
,max(case
when opi2.id is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
,it.Empresa
into #tempOpitens
from itensped it
left join opitens opi on opi.item = it.Item
and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item
and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
--where it.Numero in (2787617, 2787388)
group by it.Numero,it.Empresa;
with TempPedidosEmpenhados
as (
select distinct empresa
,numero
from dbo.pedidosempenhados
group by empresa
,numero
)
select tp.Volumes
,tp.VolumesAcessorios as VolAcessorios
,case
when pf.idPedido is null
then ''Bloqueado''
else ''Liberado''
end LibFinan
,tp.VolumesZero
,tp.TVolumes
,tp.TVolumesColetados
,tp.TVolumesAtendidos
,p.Data_Liberacao as Data
,p.Ordem_Compra
,c.Razao_Social
,e.Estado as UF
,substring(e.cidade, 1, 15) as Cidade
,t1.Fantasia as Transp
,case p.Tipo_Frete
when 1
then ''FOB''
when 2
then ''CIF''
when 3
then ''CORT''
when 4
then ''CIFSP''
else ''INDEF''
end as Frete
,p.Observacao_1 as OBS1
,p.Observacao_2 as OBS2
,p.Observacao_3 as OBS3
,convert(bit, case
when (vd.idPedido is not null)
then 1
else 0
end) as PossuiVidro
,p.Marca
,p.Transportadora
,pp.Descricao as TipoPedido
,t.Empresa
,t.Numero
,convert(bit, case
when ca.Codigo_Cliente is null
then 0
else 1
end) as InfAgenda
,p.Data_Base as PedidoData_Base
,c.Codigo_Cliente as Cliente
,p.bObs1
,p.bObs2
,p.bObs3
,convert(bit, iif((ObsRomaneio & Power(2, 1 - 1)) > 0, 1, 0)) as bObsRomaneio1
,convert(bit, iif((ObsRomaneio & Power(2, 2 - 1)) > 0, 1, 0)) as bObsRomaneio2
,convert(bit, iif((ObsRomaneio & Power(2, 3 - 1)) > 0, 1, 0)) as bObsRomaneio3
,op.PrevisaoConclusao
into #tempCandidatos
from dbo.PedidosCandidatos t
inner join dbo.pedidos p on p.empresa = t.empresa
and p.numero = t.numero
left join dbo.Clientes_Agendamento ca on ca.codigo_cliente = p.cliente
inner join dbo.TiposPedido pp on pp.Codigo = p.Tipo_Pedido --14/09/15 leonice
inner join dbo.pedidosTotais tp on tp.empresa = t.empresa
and tp.numero = t.numero
inner join dbo.Transp t1 on t1.codigo_transp = p.transportadora
inner join dbo.clientes c on c.codigo_cliente = p.cliente
inner join dbo.Endereco e on e.cliente = p.cliente
and e.sequencia = p.endereco_entrega
inner join #tempOpitens op on op.numero = t.numero
and op.empresa = t.empresa
left join dbo.PedidosLiberaFaturamento pf on pf.idPedido = p.id
left join dbo.vPedidosVidrosMyHome vd on vd.idPedido = p.id
left join TempPedidosEmpenhados pd on pd.empresa = t.empresa
and pd.numero = t.numero
-- adicionar Kasa K à regra para trazer pedidos não programados aqui...
where (
(pd.empresa is null)
or (
(p.marca in (6, 9))
and (p.Data_Programacao is null)
)
)
select distinct t.PrevisaoConclusao
,pc.*
,t.Volumes
,t.VolAcessorios
,t.LibFinan
,t.VolumesZero
,t.TVolumes
,t.TVolumesColetados
,t.TVolumesAtendidos
,t.Data
,t.Ordem_Compra
,pc.Faturamento as Data_Base
,t.Razao_Social
,t.UF
,t.Cidade
,t.Transp
,t.Frete
,t.OBS1
,t.OBS2
,t.OBS3
,t.PossuiVidro
,t.TipoPedido
,t.Marca
,pa.Agendado
,t.InfAgenda as Agendamento
,pr.Atendido as Estruturas
,'''' as Lotes
,PedidoData_Base
,t.Cliente
,1 as AdicionaEmRomaneio
,t.Transportadora
,t.bObs1
,t.bObs2
,t.bObs3
,t.bObsRomaneio1
,t.bObsRomaneio2
,t.bObsRomaneio3
from dbo.PedidosCandidatos pc
left join dbo.PrgMetalAtendidos pr on pr.empresa = pc.empresa
and pr.numero = pc.numero
inner join dbo.itensped ip on ip.empresa = pc.empresa
and ip.numero = pc.numero
--inner join dbo.vitenscompostos ic on ic.referencia = ip.item
inner join dbo.vMovel m1 on m1.referencia = ip.item
inner join #tempCandidatos t on t.empresa = pc.empresa
and t.numero = pc.numero
left join [dbo].[Pedidos_Agendamento] pa on pa.empresa = pc.empresa
and pa.numero = pc.numero
-- where (pc.numero = 2258069) or not (suser_sname() = ''KAPPESBERG\\\\juliano'')
where pc.Numero in (2787617, 2787388)
order by pc.Prioridade desc
,pc.Faturamento;
drop table #tempopitens
drop table #tempCandidatos
25/08/2020
Bruno
25/08/2020
Emerson Nascimento
select it.Empresa ,it.Numero ,max(case when opi2.id is null then opi.PrevisaoConclusao else null end) as PrevisaoConclusao into #tempOpitens -- retire para testar a query from itensped it left join opitens opi on opi.item = it.Item and opi.numero = it.numero -- não seria necessário filtrar o pedido ???? and opi.Empresa = it.Empresa and not opi.PrevisaoConclusao is null left join opitens opi2 on opi2.Item = it.Item and opi2.numero = it.numero -- não seria necessário filtrar o pedido ???? and opi2.Empresa = it.Empresa -- aqui deveria ter colocado opi2; estava opi and opi2.PrevisaoConclusao is null --where it.Numero in (2787617, 2787388) group by it.Numero,it.Empresa
25/08/2020
Bruno
Esse código não funciona, pois não traz a data. A data traz nula, pois tem itens antigos no meio e as referências sempre são atualizadas para serem produzidas.
Não posso ligar o número da opitens, pois não tem numero do pedido, apenas a itensped tem numero do pedido.
01/09/2020
Imex
Bruno, segue uma sugestão para testes:
select it.Numero, case when count(*) = count(opi.PrevisaoConclusao) then max(opi.PrevisaoConclusao) end as PrevisaoConclusao from itensped it left join opitens opi on opi.item = it.Item and opi.Empresa = it.Empresa where it.Numero in (2787617, 2787388) group by it.Numero
Espero que ajude
01/09/2020
Bruno
select it.Numero
,max (case
when it.Numero is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
from itensped it
left join opitens opi on opi.item = it.Item and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
where it.Numero in (2787617,2787388)
group by it.Numero
fiz assim mas traz sempre null e um desse numeros de pedido deveria trazer a maior data. O número do pedido está apenas na itensped.
Segue todo o código:
select it.Numero
,max(case
when opi2.id is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
,it.Empresa
into #tempOpitens
from itensped it
left join opitens opi on opi.item = it.Item
and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item
and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
--where it.Numero in (2787617, 2787388)
group by it.Numero,it.Empresa;
with TempPedidosEmpenhados
as (
select distinct empresa
,numero
from dbo.pedidosempenhados
group by empresa
,numero
)
select tp.Volumes
,tp.VolumesAcessorios as VolAcessorios
,case
when pf.idPedido is null
then ''Bloqueado''
else ''Liberado''
end LibFinan
,tp.VolumesZero
,tp.TVolumes
,tp.TVolumesColetados
,tp.TVolumesAtendidos
,p.Data_Liberacao as Data
,p.Ordem_Compra
,c.Razao_Social
,e.Estado as UF
,substring(e.cidade, 1, 15) as Cidade
,t1.Fantasia as Transp
,case p.Tipo_Frete
when 1
then ''FOB''
when 2
then ''CIF''
when 3
then ''CORT''
when 4
then ''CIFSP''
else ''INDEF''
end as Frete
,p.Observacao_1 as OBS1
,p.Observacao_2 as OBS2
,p.Observacao_3 as OBS3
,convert(bit, case
when (vd.idPedido is not null)
then 1
else 0
end) as PossuiVidro
,p.Marca
,p.Transportadora
,pp.Descricao as TipoPedido
,t.Empresa
,t.Numero
,convert(bit, case
when ca.Codigo_Cliente is null
then 0
else 1
end) as InfAgenda
,p.Data_Base as PedidoData_Base
,c.Codigo_Cliente as Cliente
,p.bObs1
,p.bObs2
,p.bObs3
,convert(bit, iif((ObsRomaneio & Power(2, 1 - 1)) > 0, 1, 0)) as bObsRomaneio1
,convert(bit, iif((ObsRomaneio & Power(2, 2 - 1)) > 0, 1, 0)) as bObsRomaneio2
,convert(bit, iif((ObsRomaneio & Power(2, 3 - 1)) > 0, 1, 0)) as bObsRomaneio3
,op.PrevisaoConclusao
into #tempCandidatos
from dbo.PedidosCandidatos t
inner join dbo.pedidos p on p.empresa = t.empresa
and p.numero = t.numero
left join dbo.Clientes_Agendamento ca on ca.codigo_cliente = p.cliente
inner join dbo.TiposPedido pp on pp.Codigo = p.Tipo_Pedido --14/09/15 leonice
inner join dbo.pedidosTotais tp on tp.empresa = t.empresa
and tp.numero = t.numero
inner join dbo.Transp t1 on t1.codigo_transp = p.transportadora
inner join dbo.clientes c on c.codigo_cliente = p.cliente
inner join dbo.Endereco e on e.cliente = p.cliente
and e.sequencia = p.endereco_entrega
inner join #tempOpitens op on op.numero = t.numero
and op.empresa = t.empresa
left join dbo.PedidosLiberaFaturamento pf on pf.idPedido = p.id
left join dbo.vPedidosVidrosMyHome vd on vd.idPedido = p.id
left join TempPedidosEmpenhados pd on pd.empresa = t.empresa
and pd.numero = t.numero
-- adicionar Kasa K à regra para trazer pedidos não programados aqui...
where (
(pd.empresa is null)
or (
(p.marca in (6, 9))
and (p.Data_Programacao is null)
)
)
select distinct t.PrevisaoConclusao
,pc.*
,t.Volumes
,t.VolAcessorios
,t.LibFinan
,t.VolumesZero
,t.TVolumes
,t.TVolumesColetados
,t.TVolumesAtendidos
,t.Data
,t.Ordem_Compra
,pc.Faturamento as Data_Base
,t.Razao_Social
,t.UF
,t.Cidade
,t.Transp
,t.Frete
,t.OBS1
,t.OBS2
,t.OBS3
,t.PossuiVidro
,t.TipoPedido
,t.Marca
,pa.Agendado
,t.InfAgenda as Agendamento
,pr.Atendido as Estruturas
,'''' as Lotes
,PedidoData_Base
,t.Cliente
,1 as AdicionaEmRomaneio
,t.Transportadora
,t.bObs1
,t.bObs2
,t.bObs3
,t.bObsRomaneio1
,t.bObsRomaneio2
,t.bObsRomaneio3
from dbo.PedidosCandidatos pc
left join dbo.PrgMetalAtendidos pr on pr.empresa = pc.empresa
and pr.numero = pc.numero
inner join dbo.itensped ip on ip.empresa = pc.empresa
and ip.numero = pc.numero
--inner join dbo.vitenscompostos ic on ic.referencia = ip.item
inner join dbo.vMovel m1 on m1.referencia = ip.item
inner join #tempCandidatos t on t.empresa = pc.empresa
and t.numero = pc.numero
left join [dbo].[Pedidos_Agendamento] pa on pa.empresa = pc.empresa
and pa.numero = pc.numero
-- where (pc.numero = 2258069) or not (suser_sname() = ''KAPPESBERG\\\\\\\\juliano'')
where pc.Numero in (2787617, 2787388)
order by pc.Prioridade desc
,pc.Faturamento;
drop table #tempopitens
drop table #tempCandidatos
01/09/2020
Imex
01/09/2020
Bruno
Exemplo 1:
A PrevisaoConclusao da última programação é null para o item UZ200-VM, antes tem as últimas datas que foram colocadas. Até a mais antiga de 2014 por exemplo que é null também e no meio tem umas datas com previsao de conclusão. No item UZ230-VEM a última data que está em programação tem data de previsao. As datas antigas que não estão em programação não podem ser puxadas. O que ajuda é opi.quantidade>opi.coletada para não pegar as datas que já foram coletadas.
No Exemplo 1:
UZ200-VM
DataBase PrevisaoConclusao
20/06/2014 null
26/08/2018 02/09/2018
30/08/2020 null
UZ230-VEM
20/07/2014 null
27/08/2019 null
31/08/2020 05/09/2020
No exemplo 1: deve pegar a data null, pois o item UZ200-VM tem a data PrevisaoConclusao que está em programação = null.
Exemplo 2:
Exemplo 1:
UZ240-VM
DataBase PrevisaoConclusao
20/06/2014 null
26/08/2018 02/09/2018
30/08/2020 03/09/2020
UZ270-VEM
20/07/2014 null
27/08/2019 null
31/08/2020 05/09/2020
No exemplo 2: deve pegar a data 05/09/2020, pois o item UZ270-VEM tem a maior data de PrevisaoConclusao que está em programação. Que é igual a 05/09/2020.
Obrigado desde já !
02/09/2020
Imex
Uma dúvida que tenho por exemplo é como você consegue identificar quais são os itens de um determinado pedido?
Nesse exemplo que você postou agora você acrescentou essa coluna Database e também citou esse critério das datas coletadas mas não consegui entender como direito o funcionamento.
02/09/2020
Bruno
Por exemplo:
pedido numero 2789183
Possui os itens 054345 e 054459
Na opitens são os itens que estiveram em produção e os que estão em produção.
Por exemplo:
Uz200-vm
Data base(data que foi colocada em produção) exemplo:02/09/2020(a última vez que o item foi colocado em produção)
A previsão para concluir é 07/09/2020 que no caso é a coluna PrevisaoConclusao.
Na opitens aparece as datas bases antigas também.
Por Exemplo:
Uz200-vm
Data base
Exemplo:04/08/2018 com previsão null.
Para diferenciar as novas das antigas pode ser usado as colunas quantidade > coletada .
Exemplo: data base(05/08/2018)
quantidade =70 coletada = 70
Data base 02/09/2020
Quantidade = 80 coletada = 0
Vamos ao exemplo:
Pedido 289765:
Itensped:
Uz100-vm
Uz200-vm
Uz300-vem
Opitens
Item DataBase. PrevisaoConclusao
Uz100-vm. 02/08/2018. Null
Uz100-vm. 02/09/2020. 07/09/2020 em produ
Uz200-vm. 02/07/217. Null
Uz200-vm. 02/09/2020. 08/09/2020. Em produ
Uz300-vem. 07/10/2014. Null
Uz300-vem 02/09/2020. Null. Em producao
Então deve trazer null , pois o item uz300-vem
Que está em produção está null, as datas antigas deve-se desconsiderar como explicado para quantidade > coletada significando que não está em produção.
Se todas datas previsão conclusão estiver com uma data então deve pegar a maior data de um dos três itens.
02/09/2020
Emerson Nascimento
se a produção foi solicitada por um pedido, preenche o campo.
se a procução foi solicitada para compor o estoque, o campo do pedido fica em branco.
se não fizer isso não tem como fazer o link entre a produção e a venda.
02/09/2020
Bruno
Clique aqui para fazer login e interagir na Comunidade :)