select join dentro de um case com select join

Jacqueline B.da Cruz 21 Reputation points
2021-03-17T20:20:53.59+00:00

Olá, Tudo bem ? Sou nova por aqui, pesquisei e não achei se é possível fazer um select case com condição, vou postar o código para mostrar o que preciso e vê se é possível, senão for me falem o que o que pode ser feito. select m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto ,case when m.ArquivoOrdemMov='OC’then ‘Possui preço de compra’ /*dentro do then preciso fazer um select join para pegar um preço que esta em uma tabela que faz join com a tabela de compras(OC) else 'Sem valor’end 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’

SQL Server
SQL Server
A family of Microsoft relational database management and analysis systems for e-commerce, line-of-business, and data warehousing solutions.
12,895 questions
Transact-SQL
Transact-SQL
A Microsoft extension to the ANSI SQL language that includes procedural programming, local variables, and various support functions.
4,563 questions
{count} votes

Accepted answer
  1. MelissaMa-MSFT 24,176 Reputation points
    2021-03-23T02:25:26.587+00:00

    Hi @Jacqueline B.da Cruz ,

    Please refer below and check whether it is helpful.

    select  m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto   
     ,'Sem valor'  
     from Mov m   
     join MovFisica f on m.SeqMovFisica=f.SeqMovFisica  
     join MS s on m.ContadorAgenteMov=s.ContadorAgenteMS  
     join Produto p on m.SeqProduto=p.SeqProduto  
     where m.ArquivoOrdemMov='MS' and s.SituacaoMS='FECHADA'  
     union  
     select  m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto   
     ,'Sem valor'  
     from Mov m   
     join MovFisica f on m.SeqMovFisica=f.SeqMovFisica  
     join ME e on m.ContadorAgenteMov=e.ContadorAgenteME  
     join Produto p on m.SeqProduto=p.SeqProduto  
     where m.ArquivoOrdemMov='ME' and e.SituacaoME='FECHADA'  
     union  
     select  m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto  
    ,'Possui preço de compra'  
     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 c.SeqOC=ci.SeqOC  
     where m.ArquivoOrdemMov='OC' and c.SituacaoOC='FECHADA'  
    

    Best regards
    Melissa


    If the answer is helpful, please click "Accept Answer" and upvote it.
    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


6 additional answers

Sort by: Newest
  1. Jacqueline B.da Cruz 21 Reputation points
    2021-03-23T15:44:36.093+00:00
      select m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.QtdOperacaoFisicaMov,p.DescricaoProduto 
          ,'Sem valor' as Preco
          from Mov m 
          join MovFisica f on m.SeqMovFisica=f.SeqMovFisica
          join MS s on m.ContadorAgenteMov=s.ContadorAgenteMS
          join Produto p on m.SeqProduto=p.SeqProduto
          where m.ArquivoOrdemMov='MS' and s.SituacaoMS='FECHADA'
          union
          select m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.QtdOperacaoFisicaMov,p.DescricaoProduto 
          ,'Sem valor' as Preco
          from Mov m 
          join MovFisica f on m.SeqMovFisica=f.SeqMovFisica
          join ME e on m.ContadorAgenteMov=e.ContadorAgenteME
          join Produto p on m.SeqProduto=p.SeqProduto
          where m.ArquivoOrdemMov='ME' and e.SituacaoME='FECHADA'
          union
          select distinct m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.QtdOperacaoFisicaMov,p.DescricaoProduto
         ,convert (varchar,ci.CustoOCItem) as Preco
          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 c.SeqOC=ci.SeqOC
          where m.ArquivoOrdemMov='OC' and c.SituacaoOC='FECHADA'
    
    0 comments No comments

  2. Jacqueline B.da Cruz 21 Reputation points
    2021-03-22T14:50:33.837+00:00
    select  m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto 
    --,case when m.ArquivoOrdemMov='OC'then 'Possui preço de compra'
    --else 'Sem valor'end
    from Mov m 
    join MovFisica f on m.SeqMovFisica=f.SeqMovFisica
    join MS s on m.ContadorAgenteMov=s.ContadorAgenteMS
    join Produto p on m.SeqProduto=p.SeqProduto
    where m.ArquivoOrdemMov='MS' and s.SituacaoMS='FECHADA'
    union
    select  m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto 
    --,case when m.ArquivoOrdemMov='OC'then 'Possui preço de compra'
    --else 'Sem valor'end
    from Mov m 
    join MovFisica f on m.SeqMovFisica=f.SeqMovFisica
    join ME e on m.ContadorAgenteMov=e.ContadorAgenteME
    join Produto p on m.SeqProduto=p.SeqProduto
    where m.ArquivoOrdemMov='ME' and e.SituacaoME='FECHADA'
    union
    select  m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto
    --,ci.CustoOCItem
    --,case when m.ArquivoOrdemMov='OC'then 'Possui preço de compra'
    --else 'Sem valor'end 
    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 c.SeqOC=ci.SeqOC/*coluna onde pega o preço(não tem nas demais queries)*/
    where m.ArquivoOrdemMov='OC' and c.SituacaoOC='FECHADA'
    
    0 comments No comments

  3. Guoxiong 8,126 Reputation points
    2021-03-19T14:17:08.727+00:00

    How about this:

    select m.ArquivoOrdemMov,
        m.ContadorAgenteMov,
        m.DataMov,
        m.SeqOrdemMov,
        m.SeqProduto,
        m.SaldoTotalMov,
        p.DescricaoProduto,
    case when m.ArquivoOrdemMov = 'OC' then ci.CustoOCItem else 'Sem valor' end
    from Mov m 
    join MovFisica f on m.SeqMovFisica=f.SeqMovFisica 
    join OC c on m.ContadorAgenteMov=c.ContadorAgenteOC 
    LEFT JOIN OCItem ci ON c.SeqOC = ci.SeqOC
    join Produto p on m.SeqProduto=p.SeqProduto 
    where m.ArquivoOrdemMov='OC' and c.SituacaoOC='FECHADA'
    

  4. Erland Sommarskog 102.3K Reputation points
    2021-03-18T22:13:31.443+00:00

    Talvez:

    select m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto
         ,case when m.ArquivoOrdemMov='OC' then
              ( select ci.CustoOCItem from OCItem ci where ci.SeqOC=c.SeqOC)
         else 'Sem valor'end 
         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'
    

    Mas são somente adivinhando...