Listar zero para valores comuns

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Sex, 15 Jun 2018 11:56 pm

Caros amigo, Estou com um problema que tenho um select...
ele lista várias NF essas tem a mesma OC (Ordem de compra) então quando tiver a mesma ordem de compra e o valor a NF for igual... deverá listar apenas o valor da primeira NF na coluna VALR e o resto das NFs deverão aparecer zero.

exemplo
Código: Selecionar todos
select NF, OC, VL, ID FROM NOTAS


Código: Selecionar todos
NF    OC   VL     ID
02     33   2,00  1
03     33   0,00  2
04     33   0,00  3
05     55   5,00  4
06     55   0,00  6
06     55   0,00  7


Se alguém puder me ajudar agradeço..

att
Vanderlei
vindalencio
Localização: Curitiba

Vanderlei Indalencio

Mensagemem Sex, 22 Jun 2018 2:21 pm

Boa tarde,
Você pode usar a função LAG para verificar o registro anterior e se é a mesma ordem de compra e com o mesmo valor.
https://docs.oracle.com/cd/B19306_01/se ... ons070.htm

Código: Selecionar todos
--tabela temporária
with  temp_nf as(
  select 02 NF,    33 OC,   2 VL,     1 ID from dual  union all
  select 03 NF,    33 OC,   2 VL,     2 ID from dual union all
  select 04 NF,    33 OC,   2 VL,     3 ID from dual union all
  select 05 NF,    55 OC,   5 VL,     4 ID from dual union all
  select 06 NF,    55 OC,   5 VL,     6 ID from dual union all
  select 06 NF,    55 OC,   5 VL,     7 ID from dual
)


--consulta na tabela temporária
select
nf,
oc,
vl,
id,
--campos adicionais para demonstração
LAG(oc, 1, 0) OVER (ORDER BY oc)  oc_lag, --aqui pega a ordem de compra anterior
LAG(vl, 1, 0) OVER (ORDER BY oc)  vl_lag,  --aqui pega o valor da ordem de compra anterior

--Se o oc_lag for igual ao atual e se o  vl_lag for igual ao atual, então é 0, senão é o vl atual
case
   when LAG(oc, 1, 0) OVER (ORDER BY oc) = oc
        and LAG(vl, 1, 0) OVER (ORDER BY oc) = vl then 0
   else vl
end vl_novo
from
temp_nf
geovani
Localização: Joinville-SC

Geovani Cristofolini
Consultor de Business intelligence
http://useweknow.com



Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes