none
Ajuda com script IF RRS feed

  • Pergunta

  • Boa tarde

    Galera!

    Estou precisando de uma ajuda nesta consulta, exemplo:

    Tenho que trazer o resultado se caso não existir produto na tabela ESTQ_LOC_ARMAZ executar o primeiro select, caso contrario fazer a consulta do segundo, fiz da seguinte formar porém só esta execultando a segunda condição e não traz registros.

    Obrigado.

    IF   Exists (Select  ELA.EstqLocArmazQtd QtdEstq From ESTQ_LOC_ARMAZ ELA 

          With(NoLock) ,

          ITEM_PED_COMP IP With(NoLock)

          Where ELA.ProdCodEstr = IP.ProdCodEstr

          And ELA.EmpCod = IP.EmpCod)

    Begin

    SELECT

            ELA.EstqLocArmazQtd QtdEstq, PC.EmpCod, PC.PedCompNum, PC.PedCompTipo, PC.PedCompData, PC.CompradCod,

          PC.EntCod, PC.PedCompTexto, PC.PedCompPercDescEspec, PC.PedCompValDescEspec,PC.PedCompValCambio,

          IP.ItPedCompQtd,IP.ItPedCompQtdCalc, IP.ProdCodEstr, IP.ItPedCompUnidMedCod,

          IP.ItPedCompValUnit, IP.ItPedCompValIpi, IP.ItPedCompPercIpi, IP.ItPedCompValIcms,

            IP.ItPedCompPercIcms, IP.ItPedCompValTot, PC.PedCompDataEntrega,IP.ItPedCompUnidMedValUnit,

            I.IndEconNome,IP.ItPedCompDataPrevEntrega,

          Case

            When ItPedCompNomeProd = 'Principal' Then P.ProdNome

            When ItPedCompNomeProd = 'Alternativo 1' Then P.ProdNomeAlt1

            When ItPedCompNomeProd = 'Alternativo 2' Then P.ProdNomeAlt2

            When ItPedCompNomeProd = 'Alternativo 3' Then P.ProdNomeAlt3

            When ItPedCompNomeProd = 'Descrição Técnica' Then P.ProdNome

            end,

          PC.PedCompValMerc,

          PC.PedCompValServ,

          (PC.PedCompValMerc + PC.PedCompValServ - PC.PedCompValGerIcms) AS ValorLiq,

          PC.PedCompValIcms,

          PC.PedCompValGerIcms,

          PC.PedCompValGerBaseIcms,

          PC.PedCompValIpi,

          PC.PedCompValGerIpi,

          PC.PedCompValGerBaseIpi,

          (PC.PedCompValEmbalagem + PC.PedCompValFrete + PC.PedCompValSeguro + PC.PedCompValDespesa) AS Depesas,

          (PC.PedCompValAcrescFin + PC.PedCompValAcrescFinProd + PC.PedCompValAcrescFinServ) AS Acrescimos,

          (PC.PedCompValDescEspec + PC.PedCompValDescEspecProd + PC.PedCompValDescEspecServ) AS Descontos,

          PC.PedCompValTotal, UPPER(PC.USERPedCompTipo) AS USERPedCompTipo

       

    From  PED_COMP PC With(NoLock),

          ITEM_PED_COMP IP With(NoLock),

          PRODUTO P With(NoLock),

            IND_ECONOMICO I With(NoLock),

                   ESTQ_LOC_ARMAZ ELA With(NoLock)

    Where PC.EmpCod = 1

    And   PC.PedCompNum = '0023506'

    And   UPPER(PC.USERPedCompTipo) = 'COMPRAS'

    And     PC.IndEconCod = I.IndEconCod

    And   PC.EmpCod = IP.EmpCod

    And   PC.PedCompNum = IP.PedCompNum

    And   P.ProdCodEstr = IP.ProdCodEstr

    And    IP.ProdCodEstr = ELA.ProdCodEstr

    AND    ELA.LocArmazCodEstr = '3.1'

    And    Ela.EmpCod = IP.EmpCod

    Order By IP.ItPedCompSeq

    end

    else

    begin

          Select      PC.EmpCod, PC.PedCompNum, PC.PedCompTipo, PC.PedCompData, PC.CompradCod,

          PC.EntCod, PC.PedCompTexto, PC.PedCompPercDescEspec, PC.PedCompValDescEspec,PC.PedCompValCambio,

          IP.ItPedCompQtd,IP.ItPedCompQtdCalc, IP.ProdCodEstr, IP.ItPedCompUnidMedCod,

          IP.ItPedCompValUnit, IP.ItPedCompValIpi, IP.ItPedCompPercIpi, IP.ItPedCompValIcms,

            IP.ItPedCompPercIcms, IP.ItPedCompValTot, PC.PedCompDataEntrega,IP.ItPedCompUnidMedValUnit,

            I.IndEconNome,IP.ItPedCompDataPrevEntrega,

          Case

            When ItPedCompNomeProd = 'Principal' Then P.ProdNome

            When ItPedCompNomeProd = 'Alternativo 1' Then P.ProdNomeAlt1

            When ItPedCompNomeProd = 'Alternativo 2' Then P.ProdNomeAlt2

            When ItPedCompNomeProd = 'Alternativo 3' Then P.ProdNomeAlt3

            When ItPedCompNomeProd = 'Descrição Técnica' Then P.ProdNome

          End As ProdNome,

          PC.PedCompValMerc,

          PC.PedCompValServ,

          (PC.PedCompValMerc + PC.PedCompValServ - PC.PedCompValGerIcms) AS ValorLiq,

          PC.PedCompValIcms,

          PC.PedCompValGerIcms,

          PC.PedCompValGerBaseIcms,

          PC.PedCompValIpi,

          PC.PedCompValGerIpi,

          PC.PedCompValGerBaseIpi,

          (PC.PedCompValEmbalagem + PC.PedCompValFrete + PC.PedCompValSeguro + PC.PedCompValDespesa) AS Depesas,

          (PC.PedCompValAcrescFin + PC.PedCompValAcrescFinProd + PC.PedCompValAcrescFinServ) AS Acrescimos,

          (PC.PedCompValDescEspec + PC.PedCompValDescEspecProd + PC.PedCompValDescEspecServ) AS Descontos,

          PC.PedCompValTotal, UPPER(PC.USERPedCompTipo) AS USERPedCompTipo

       

    From  PED_COMP PC With(NoLock),

          ITEM_PED_COMP IP With(NoLock),

          PRODUTO P With(NoLock),

            IND_ECONOMICO I With(NoLock)

     

    Where PC.EmpCod = 1

    And   PC.PedCompNum = '0023506'

    And   UPPER(PC.USERPedCompTipo) = 'COMPRAS'

    And     PC.IndEconCod = I.IndEconCod

    And   PC.EmpCod = IP.EmpCod

    And   PC.PedCompNum = IP.PedCompNum

    And   P.ProdCodEstr = IP.ProdCodEstr

    end

    • Movido Fábio Jr sexta-feira, 20 de setembro de 2013 17:26 Não é dúvida sobre Scripts Administrativos
    sexta-feira, 20 de setembro de 2013 16:57

Respostas

  • Para ele trazer esse resultado junto você tem que adicionar ele nas querys dentro da condição if

    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    sexta-feira, 27 de setembro de 2013 16:13
  • Kanaãm,

    Concordo com você, fazendo com que o IF se torne o elemento de análise condicional que vai determinar qual será a ação e comportamento do SQL Server.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr terça-feira, 8 de outubro de 2013 20:42
    sexta-feira, 27 de setembro de 2013 18:00

Todas as Respostas

  • Leandro,

    Vou mover sua pergunta para a área de SQL Server.


    Fábio de Paula Junior

    sexta-feira, 20 de setembro de 2013 17:26
  • Leandro, sua consulta abaixo retorna algum registro?

    IF   Exists (Select  ELA.EstqLocArmazQtd QtdEstq From ESTQ_LOC_ARMAZ ELA 
          With(NoLock) ,
          ITEM_PED_COMP IP With(NoLock)
          Where ELA.ProdCodEstr = IP.ProdCodEstr
          And ELA.EmpCod = IP.EmpCod)

    Se ela retornar, ela vai cair na primeira Query, senão vai cair na segunda.

    Pelo que eu entendi que você precisa é o contrário, então você pode trocar elas de lugar ou adicionar um NOT antes do EXISTS.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    sexta-feira, 20 de setembro de 2013 17:35
  • Boa tarde<o:p></o:p>

    Fabio!<o:p></o:p>

    A consulta retornar resultado sim, só que preciso que traga o campo ELA.EstqLocArmazQtd, junto com os demais campos informado na Primeira query, o problema é justamente esse, ela está trazendo sem este campo.<o:p></o:p>

    Obrigado <o:p></o:p>

    sexta-feira, 20 de setembro de 2013 18:03
  • Para ele trazer esse resultado junto você tem que adicionar ele nas querys dentro da condição if

    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    sexta-feira, 27 de setembro de 2013 16:13
  • Kanaãm,

    Concordo com você, fazendo com que o IF se torne o elemento de análise condicional que vai determinar qual será a ação e comportamento do SQL Server.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr terça-feira, 8 de outubro de 2013 20:42
    sexta-feira, 27 de setembro de 2013 18:00