none
case ( campo calculado) RRS feed

  • Pergunta

  • Bom dia

    Tenho a seguinte situação

    2 tabelas

      1 - c100 (corpo da nota)

           id , num_doc, data, valor, vl_desc, vl_ipi

      2  - c170 (item da nota)

          id, cod_item, desc, qtd, valor_unit, Vl_ipi,Vl_desc

    Preciso criar um select usando o case para testar alguma situaçoes:

    Ex: se o somatorio do valor do ipi dos itens for igual do corpo da nota (sum(i.vl_desc) = sum(n.vl_desc) eu faço um calculo

    sum(i.vl_item) + sum(i.vl_ipi)

    EX2 se o somatorio do valor do ipi <> somatorio do valor de ipi do corpo da nota (sum(i.vl_desc) = sum(n.vl_desc) eu faço outro calculo

    sum(i.vl_item) + sum(n.vl_ipi),

    preciso testar varias situaçoes e cada situação fazer um calculo diferente

    OBS: sendo que o o criterio da condição é um calculo entre duas tabelas(usando inner join)

    Obrigado

    Alguem pode me ajudar ?

    terça-feira, 9 de outubro de 2012 11:44

Respostas

  • Você vai ter que colocar:

    when (Sum(n.Vl_merc) <> Sum(N.Vl_doc)) AND (Tal Coisa...) Then

    ...Codigo

    when (Sum(n.Vl_merc) <> Sum(N.Vl_doc)) AND (Outra Coisa...) Then

    ...Codigo

    Else

    ...Codigo


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Harley Araujo quinta-feira, 11 de outubro de 2012 13:28
    quarta-feira, 10 de outubro de 2012 16:52
    Moderador

Todas as Respostas

  • Gildo, é só usar o Case mesmo. O que pode "pegar" é a questão do Group by: você terá que colocar no Group by todos os campos que utilizar no Select e que não estiverem contidos numa função de agregação.

    Exemplo:

    Select
      N.num_doc,
      Situacao = Case
                   When (Sum(I.VlIPI) = Sum(N.VlIPI)) Then
                     'Faz tal coisa'
                   When (Sum(I.VlIPI) < Sum(N.VlIPI)) Then
                     'Faz tal coisa'
                   Else
                     'Faz tal coisa'
                 End
    From
      c100 N Inner Join c170 I on (I.IdNota = N.IdNota)
    Group by
      N.num_doc


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 9 de outubro de 2012 12:29
    Moderador
  • oi

    Roberson

    Tem como eu colocar o If dentro do Case ?

    o script que vc me passou esta resolvendo o meu problema, mais como eu tenho varias situaçoes a ser verificada.. preciso colocar um if dentro do case

    obrigado

    terça-feira, 9 de outubro de 2012 14:49
  • Ola...

    Você pode colocar CASE dentro do SUM. Exemplo:

    SUM(CASE WHEN <Condicao> THEN 1 ELSE 0 END)

    SUM(CASE WHEN <Condicao> THEN <Campo1> ELSE <Campo2> END)


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 9 de outubro de 2012 14:52
  • E você pode colocar outros Cases dentro de cada Case.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 9 de outubro de 2012 15:01
    Moderador
  • como ficaria essa query  com um case dentro da outra ?

    Obrigado

    terça-feira, 9 de outubro de 2012 19:00
  • como ficaria essa query  com um case dentro da outra ?

    Obrigado

    terça-feira, 9 de outubro de 2012 19:00
  • Gilso, o que exatamente você precisa?

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 9 de outubro de 2012 19:45
    Moderador
  • Select N.num_doc, i.cfop, vl_doc1 = case when (Sum(n.Vl_merc) = Sum(N.Vl_doc)) Then -- (Sum(i.VL_item) + sum (i.Vl_ipi)+ sum (i.Vl_icms_st)- sum (i.Vl_desc)) when (Sum(n.Vl_merc) <> Sum(N.Vl_doc)) Then case 'outro calculo' when (Sum(i.VL_item) + sum (i.Vl_ipi)+ sum (i.Vl_icms_st) = (n.vl_doc))then end From c100 N Inner Join c170 I on (I.Id_PAI = N.Id) Group by N.num_doc,i.cfop,n.vl_desc,n.vl_merc,N.Vl_doc,n.vl_ipi order by n.num_doc

    a query ficou dessa maneira acima.

    maais depois do  when (Sum(n.Vl_merc) <> Sum(N.Vl_doc)) Then eu tenho que testar outras condiçoes dentro dela

    Obrigado


    quarta-feira, 10 de outubro de 2012 12:58
  • Você vai ter que colocar:

    when (Sum(n.Vl_merc) <> Sum(N.Vl_doc)) AND (Tal Coisa...) Then

    ...Codigo

    when (Sum(n.Vl_merc) <> Sum(N.Vl_doc)) AND (Outra Coisa...) Then

    ...Codigo

    Else

    ...Codigo


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Harley Araujo quinta-feira, 11 de outubro de 2012 13:28
    quarta-feira, 10 de outubro de 2012 16:52
    Moderador