Select case with subselect and Join

Asked

Viewed 24 times

0

I need to make a select case with a subselect, is it possible? If yes please let me know where I am going wrong, else what I can do in this case:

SELECT m.arquivoordemmov,
       m.contadoragentemov,
       m.datamov,
       m.seqordemmov,
       m.seqproduto,
       m.saldototalmov,
       p.descricaoproduto ,
       CASE
              WHEN m.arquivoordemmov='OC'THEN 'Preço'
                     /*o que preciso é fazer um select dentro do then (select ci.CustoOCItem from OCItem ci join OC c on c.SeqOC=
ci.SeqOC )*/
              from   mov m
              JOIN   movfisica f
              ON     m.seqmovfisica=f.seqmovfisica
              JOIN   oc c
              ON     m.contadoragentemov=c.contadoragenteoc
              JOIN   produto p
              ON     m.seqproduto=p.seqproduto
              WHERE  m.arquivoordemmov='OC'
              AND    c.situacaooc='FECHADA'

1 answer

0

It is possible to subquery the case when. In your case as only one case could simply make a Join:

SELECT m.arquivoordemmov,
       m.contadoragentemov,
       m.datamov,
       m.seqordemmov,
       m.seqproduto,
       m.saldototalmov,
       p.descricaoproduto,
       ci.CustoOCItem,
 from  mov m
 JOIN  movfisica f ON m.seqmovfisica=f.seqmovfisica
 JOIN  oc c ON m.contadoragentemov=c.contadoragenteoc
 JOIN  produto p ON m.seqproduto=p.seqproduto
 JOIN  OCItem ci on ci.SeqOC = c.SeqOC
WHERE  m.arquivoordemmov='OC'
  AND  c.situacaooc='FECHADA'

Now the case would make sense if it had a different behavior for each value, for example like this:

CASE WHEN m.arquivoordemmov='OC' THEN (
         select ci.CustoOCItem 
           from OCItem ci join OC c on c.SeqOC=ci.SeqOC)
ELSE 'Preço'
END AS Alias

You can see an example of this case working here: http://sqlfiddle.com/#! 9/687ac2/3

Browser other questions tagged

You are not signed in. Login or sign up in order to post.