Duplicando registros !

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
LucianoSilva
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Sáb, 26 Out 2019 6:11 pm

Prezados, boa tarde !

Desenvolvemos um relatório onde trás itens fabricados/modelo por exemplo :

ANO_FAB | ANO_MOD
2018. 2019
2019. 2020
2020. 2020

Porem o saldo que vem esta buscando somente de um período.

Como esta :
Imagem


Como tem que ser :
Imagem

Para isso estamos usando a seguinte quero :

Selecionar tudo

select  DISTINCT mmt.inventory_item_id ,
     -----    
         rtrim ( msib.segment1,' ')        MATERIAL,
         rtrim ( msib.description, ' ')   DESCRICAO,
     ----- 
         msn.attribute2    ANO_FAB,
         mde.element_value ANO_MOD,
       
        (SELECT SUM(NVL(mmt1.transaction_quantity,0))
        FROM MTL_ONHAND_QUANTITIES mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id
        AND   mmt1.subinventory_code = 'KMB_EXP') SUB_EXP,
        
        (SELECT SUM(NVL(mmt1.reservation_quantity,0))
        FROM mtl_reservations mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id) RESERVA,
       
       (SELECT SUM(NVL(mmt1.transaction_quantity,0))
        FROM  MTL_ONHAND_QUANTITIES mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id
        AND mmt1.subinventory_code = 'KMB_EXP') -
      
       (SELECT SUM(NVL(mmt1.reservation_quantity,0))
        FROM mtl_reservations mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id) SALDO_EXP,
      
       (SELECT SUM(NVL(mmt1.transaction_quantity,0))
        FROM  MTL_ONHAND_QUANTITIES mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id
        AND mmt1.subinventory_code = 'KMB_CTMA') SUB_CTMA,
      
       (SELECT SUM(NVL(mmt1.transaction_quantity,0))
        FROM  MTL_ONHAND_QUANTITIES mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id
        AND mmt1.subinventory_code = 'KMB_CQTB') SUB_CQTB,
      
      ( (SELECT SUM(NVL(mmt1.transaction_quantity,0))
        FROM  MTL_ONHAND_QUANTITIES mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id
        AND mmt1.subinventory_code = 'KMB_EXP') -
      
        NVL((SELECT SUM(NVL(mmt1.reservation_quantity,0))
        FROM mtl_reservations mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id) ,0)+ 
      
        NVL( (SELECT SUM(NVL(mmt1.transaction_quantity,0))
        FROM  MTL_ONHAND_QUANTITIES mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id
        AND mmt1.subinventory_code = 'KMB_CTMA'),0)+
        
        NVL( (SELECT SUM(NVL(mmt1.transaction_quantity,0))
        FROM  MTL_ONHAND_QUANTITIES mmt1
        WHERE mmt1.inventory_item_id = mmt.inventory_item_id
        AND mmt1.subinventory_code = 'KMB_CQTB'),0)) TOTAL        
      
 FROM 
       mtl_onhand_quantities       mmt
     , mtl_system_items_b          msib
     , mtl_serial_numbers          msn
     , mtl_descr_element_values     mde
 where mmt.inventory_item_id       = msib.inventory_item_id
 and   mmt.organization_id         = msib.organization_id
 and   mmt.inventory_item_id       = msn.inventory_item_id 
 and   mmt.inventory_item_id       = mde.inventory_item_id 
 and   mde.element_name =              'ANO/MOD'
 --and   mmt.inventory_item_id     in (16132 ,  16120,  16121)
ORDER BY 1
Alguém pode ajudar nesse caso ?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5023
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Isso está acontecendo porque o seu SALDO está sendo buscado apenas pelo INVENTORY_ITEM_ID.
Você não está considerando o ANO e MODELO nos sub-selects.
Teria que colocar essas informação DENTRO das suas sub-queries e filtrar baseado na tabela de fora.

Mas eu faria a sua query totalmente diferente.
Mais ou menos assim:

Selecionar tudo

select   mmt.inventory_item_id ,
     -----   
         rtrim ( msib.segment1,' ')        MATERIAL,
         rtrim ( msib.description, ' ')   DESCRICAO,
     -----
         msn.attribute2    ANO_FAB,
         mde.element_value ANO_MOD,
       
      sum(   decode(mmt.SUBINVENTORY_CODE, 'KMB_EXP', NVL(mmt.transaction_quantity,0), 0) ) SUB_EXP
    -- SUM( NVL(mmt.reservation_quantity,0)   )RESERVA
    , sum(   decode(mmt.SUBINVENTORY_CODE, 'KMB_CTMA', NVL(mmt.transaction_quantity,0), 0) ) SUB_CTMA
    , sum(   decode(mmt.SUBINVENTORY_CODE, 'KMB_CQTB', NVL(mmt.transaction_quantity,0), 0) ) SUB_CQTB
   
FROM
       mtl_onhand_quantities       mmt
     , mtl_system_items_b          msib
     , mtl_serial_numbers          msn
     , mtl_descr_element_values     mde
where mmt.inventory_item_id       = msib.inventory_item_id
and   mmt.organization_id         = msib.organization_id
and   mmt.inventory_item_id       = msn.inventory_item_id
and   mmt.inventory_item_id       = mde.inventory_item_id
and   mde.element_name =              'ANO/MOD'
--and   mmt.inventory_item_id     in (16132 ,  16120,  16121)
GROUP BY 
 mmt.inventory_item_id ,  
         rtrim ( msib.segment1,' ')       ,
         rtrim ( msib.description, ' ') ,
         msn.attribute2    ,
         mde.element_value  
LucianoSilva
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Sáb, 26 Out 2019 6:11 pm

Entendi...
Vou verificar aqui e retorno... Mas muito obrigado pela dica... já ajudou bastante.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante