none
Coluna derivada

    Pergunta

  • Olá pessoal,

    Tenho uma dúvida sobre colunas derivadas. A partir de um case when eu criei uma nova coluna chamada "Valor Ajustado". Eu queria usar a mesma para criar uma segunda coluna com o código:

          case when flan.pagrec = 1 then 'Valor Ajustado' else (-'Valor Ajustado')
          end

    É possível? 

    segunda-feira, 12 de março de 2018 16:09

Respostas

  • Boa noite,

    rodjunqueira, talvez uma alternativa seja o uso do operador Apply. Ex:

    select
        t.pagrec,
        ca.ValorAjustado,
        case when t.pagrec = 1 then ca.ValorAjustado else -ca.ValorAjustado end
    from Tabela as t
    cross apply
    (
        select
            case when t.MinhaColuna = 1 then 100 else 200 end as ValorAjustado
    ) as ca

    Espero que seja útil


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 12 de março de 2018 23:29
  • Outra coisa que resolveria seria fazer case when dentro de um case when, consigo fazer isso?
    Sim.

    Uma solução de contorno é a utilização de CTE ou subconsulta.

    -- código #1
    with cte1 as (
    SELECT ...,
           case when ...  then ... end as [Valor Ajustado]
      from ...
    )
    SELECT ...,
    case when flan.pagrec = 1 then [Valor Ajustado] else -[Valor Ajustado] end from cte1
    ... join FLAN ...;


    e-mail       José Diz     Belo Horizonte, MG - Brasil



    terça-feira, 13 de março de 2018 09:43
    Moderador
  • Bom dia , as respostas então muito boa , e até parece que vai ajudar ,mas deixe- me insistir no item que o Galvão Comentou.

    O que exatamente você precisa? Será que uma Stored Procedure ou Function não poderá lhe ajuda?

    Nos conte o que vc precisa fazer , quais são suas entradas e sua saída esperada.

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    • Marcado como Resposta rodjunqueira quinta-feira, 15 de março de 2018 16:50
    terça-feira, 13 de março de 2018 11:22

Todas as Respostas

  • É possível?

    Não.


    e-mail       José Diz     Belo Horizonte, MG - Brasil


    segunda-feira, 12 de março de 2018 20:11
    Moderador
  • Outra coisa que resolveria seria fazer case when dentro de um case when, consigo fazer isso?


    • Editado rodjunqueira segunda-feira, 12 de março de 2018 22:46
    segunda-feira, 12 de março de 2018 22:46
  • Rodjunqueira,

    Pode ser até possível, mas imagine a dificuldade que isso poderá gerar no processamento, pois você terá case when aninhados.

    O que exatamente você precisa? Será que uma Stored Procedure ou Function não poderá lhe ajuda?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 12 de março de 2018 23:03
  • Boa noite,

    rodjunqueira, talvez uma alternativa seja o uso do operador Apply. Ex:

    select
        t.pagrec,
        ca.ValorAjustado,
        case when t.pagrec = 1 then ca.ValorAjustado else -ca.ValorAjustado end
    from Tabela as t
    cross apply
    (
        select
            case when t.MinhaColuna = 1 then 100 else 200 end as ValorAjustado
    ) as ca

    Espero que seja útil


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 12 de março de 2018 23:29
  • Boa noite,

    rodjunqueira, talvez uma alternativa seja o uso do operador Apply. Ex:

    select
        t.pagrec,
        ca.ValorAjustado,
        case when t.pagrec = 1 then ca.ValorAjustado else -ca.ValorAjustado end
    from Tabela as t
    cross apply
    (
        select
            case when t.MinhaColuna = 1 then 100 else 200 end as ValorAjustado
    ) as ca

    Espero que seja útil


    Assinatura: http://www.imoveisemexposicao.com.br

    Gapimex,

    Pode ser mesmo, o uso do Cross Apply realizando a leitura linha a linha poderá fazer a análise condicional que ele deseja.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 13 de março de 2018 00:29
  • Outra coisa que resolveria seria fazer case when dentro de um case when, consigo fazer isso?
    Sim.

    Uma solução de contorno é a utilização de CTE ou subconsulta.

    -- código #1
    with cte1 as (
    SELECT ...,
           case when ...  then ... end as [Valor Ajustado]
      from ...
    )
    SELECT ...,
    case when flan.pagrec = 1 then [Valor Ajustado] else -[Valor Ajustado] end from cte1
    ... join FLAN ...;


    e-mail       José Diz     Belo Horizonte, MG - Brasil



    terça-feira, 13 de março de 2018 09:43
    Moderador
  • Bom dia , as respostas então muito boa , e até parece que vai ajudar ,mas deixe- me insistir no item que o Galvão Comentou.

    O que exatamente você precisa? Será que uma Stored Procedure ou Function não poderá lhe ajuda?

    Nos conte o que vc precisa fazer , quais são suas entradas e sua saída esperada.

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    • Marcado como Resposta rodjunqueira quinta-feira, 15 de março de 2018 16:50
    terça-feira, 13 de março de 2018 11:22