Duvida select ...case ? If

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
isabelp
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 07 Set 2005 6:31 am
Localização: s.paulo

Tenho várias tabelas relacionadas
Tabelas

Selecionar tudo

(a)Pedidos : Cod_pedido, desc_pedido,cod_serv ....
(b)Pedido_Artigos: Cod_pedido, Cod_Artigo, unidade, Quant_pedida...
(c)Artigos: Cod_Artigo,descrição_Art... 
(d)Movimentos:Cod_Artigo, qt_movi, tipo_movi, cod_serv
O meu select vai buscar

Selecionar tudo

select a.cod_pedido,
       a.desc_pedido,
       d.cod_serv,
       d.Cod_Artigo,
       c.descrição_Art,
       c.unid_med,
       b.quant_pedida Ideal,
       (-1) * (round(sum(decode(d.tipo_movi, 'SD', d.qt_movi, 0)), 2)) Quant_consumida
  from pedidos a, pedido_artigo b, artigos c, movimentos d
 where b.Cod_Artigo = c.Cod_Artigo
   and a.cod_pedido = b.cod_pedido
   and a.cod_serv = d.cod_serv
   and a.cod_pedido = '23'
   and c.Cod_Artigo = d.Cod_Artigo
 group by d.Cod_Artigo,
          a.cod_pedido,
          a.desc_pedido,
          d.cod_serv,
          b.Cod_Artigo,
          c.descrição_Art,
          c.unid_med,
          b.quant_pedida,
 order by a.cod_pedido desc
O Resultado do select será este:

Selecionar tudo

COD_PEDIDO DESC_PEDIDO      COD_SERV   ARTIGO  DESCRICAO    UNID_MED  IDEAL  QUANT_CONSUMIDA
23         DESCRICAO TEST   123        101     TESTE 101    GR        5      11
Existe no entanto o caso, em que, se não existir o artigo na tabela movimentos este não é listado, eu precisava que no caso de b.Cod_artigo não existir na tabela
movimentos ele retorne Vazio (ou outro caractere) na coluna Quant_consumida, se existir ele retorna então a soma.

será possivél ?
como faço isso ? case ? If?

Obrigado
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Bom dia, Isabel.

Tente com Joins (left/outer), como no exemplo, ou procure por OUTER JOIN aqui no fórum.

Selecionar tudo

Left Outer Join  SELECT <column_name>, <column_name>
FROM <table_name alias>, <table_name alias>
WHERE <alias.column_name = <alias.column_name>
AND <alias.column_name> = <alias.column_name> (+);  

SELECT p.last_name, t.title_name
FROM person p, title t
WHERE p.title_1 = t.title_abbrev(+); 

Right Outer Join  SELECT <column_name>, <column_name>
FROM <table_name alias>, <table_name alias>
WHERE <alias.column_name> (+) = <alias.column_name>;  

SELECT p.last_name, t.title_name
FROM person p, title t
WHERE p.title_1(+) = t.title_abbrev;  
fonte: www.psoug.org
Responder
  • Informação
  • Quem está online

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