none
Retornar Maior Valor de cada linha de uma tabela RRS feed

  • Pergunta

  • Prezados, boa tarde!

    Tenho uma tabela com 5 campos:
    A, B, C, D, id_equipamento,tensao
    o preenchimento dela fica mais ou menos assim:

    0.22, 2, 0.55, 3, 1, 0.22 
    10, 2, 3, 7, 1, 13.8
    10, 12, 5, 15, 2, 345

    Sendo assim gostaria de fazer o seguinte:

    A consulta iria me retornar as 3 linhas acima porem com o maior valor entre as variaveis (A,B,C,D) de cada uma das linhas:

    3, 1, 0.22
    10, 1, 13.8
    15, 2, 345

    Alguem teria uma sugestão?
    Desde ja agradeço!
    Abraços.

    quinta-feira, 14 de janeiro de 2021 17:19

Respostas

  • Lupiva,

    Pegando a sugestão do Gapimex, seria algo similar a este resultado:

    -- Criando a Tabela --
    Create Table Tabela
    (A Float,
     B Float,
     C Float,
     D Float,
     Id_Equipamento Int,
     Tensao Float)
    Go
    
    -- Inserindo valores apresentados --
    Insert Into Tabela 
    Values (0.22, 2, 0.55, 3, 1, 0.22),
                (10, 2, 3, 7, 1, 13.8),
                (10, 12, 5, 15, 2, 345)
    Go
    
    -- Montando o Select --
    Select MAX(ColunasEmLinha.Valores) As MaiorValor, Id_Equipamento, Tensao  From Tabela T
    Cross Apply (Values (T.A), (T.B),  (T.C), (T.D)) As ColunasEmLinha(Valores)
    Group By Id_Equipamento, Tensao
    Go

    
    

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



    • Editado Junior Galvão - MVPMVP quinta-feira, 14 de janeiro de 2021 19:01
    • Marcado como Resposta LUPIVA quinta-feira, 14 de janeiro de 2021 19:03
    quinta-feira, 14 de janeiro de 2021 18:48

Todas as Respostas

  • Boa tarde,

    Segue uma sugestão para testes utilizando o construtor de tabela Values:

    SELECT
        t.id_equipamento,
        t.tensao,
        MAX(ca.N) AS MaiorValor
    FROM Tabela AS t
    CROSS APPLY 
    ( 
        (VALUES (t.A), (t.B), (t.C), (t.D)) AS v(N) 
    ) as ca
    

    Espero que ajude


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

    • Marcado como Resposta LUPIVA quinta-feira, 14 de janeiro de 2021 18:58
    • Não Marcado como Resposta LUPIVA quinta-feira, 14 de janeiro de 2021 19:18
    quinta-feira, 14 de janeiro de 2021 18:09
  • Lupiva,

    Pegando a sugestão do Gapimex, seria algo similar a este resultado:

    -- Criando a Tabela --
    Create Table Tabela
    (A Float,
     B Float,
     C Float,
     D Float,
     Id_Equipamento Int,
     Tensao Float)
    Go
    
    -- Inserindo valores apresentados --
    Insert Into Tabela 
    Values (0.22, 2, 0.55, 3, 1, 0.22),
                (10, 2, 3, 7, 1, 13.8),
                (10, 12, 5, 15, 2, 345)
    Go
    
    -- Montando o Select --
    Select MAX(ColunasEmLinha.Valores) As MaiorValor, Id_Equipamento, Tensao  From Tabela T
    Cross Apply (Values (T.A), (T.B),  (T.C), (T.D)) As ColunasEmLinha(Valores)
    Group By Id_Equipamento, Tensao
    Go

    
    

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



    • Editado Junior Galvão - MVPMVP quinta-feira, 14 de janeiro de 2021 19:01
    • Marcado como Resposta LUPIVA quinta-feira, 14 de janeiro de 2021 19:03
    quinta-feira, 14 de janeiro de 2021 18:48
  • Boa tarde,

    Segue uma sugestão para testes utilizando o construtor de tabela Values:

    SELECT
        t.id_equipamento,
        t.tensao,
        MAX(ca.N) AS MaiorValor
    FROM Tabela AS t
    CROSS APPLY 
    ( 
        (VALUES (t.A), (t.B), (t.C), (t.D)) AS v(N) 
    ) as ca

    Espero que ajude


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

    Gapimex,

    Acredito que seja necessário adicionar a Cláusula Group By para pode aplicar o uso da função Max().


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

    quinta-feira, 14 de janeiro de 2021 18:49
  • Ola, boa tarde!

    Primeiramente muito obrigado pela dica.
    Fiz algumas modificações no SQL de exemplo e funcionou perfeitamente.

    Valeu mesmo pela ajuda!

    Abraços

    quinta-feira, 14 de janeiro de 2021 18:58
  • Ola, boa tarde!

    Primeiramente muito obrigado pela dica.
    Fiz algumas modificações no SQL de exemplo e funcionou perfeitamente.

    Valeu mesmo pela ajuda!

    Abraços

    Lupiva,

    Ok, obrigado, eu atualizei o código deixando da forma que você havia proposto o retorno.


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

    quinta-feira, 14 de janeiro de 2021 18:59
  • Ola Junior, boa tarde!

    Muito obrigado pelo retorno..
    Foram essas modificações mesmo que tive que fazer..e algumas condições.
    Agora deu certo.

    Muito obrigado pela ajuda.

    Abraços

    quinta-feira, 14 de janeiro de 2021 19:01
  • Ola Junior, boa tarde!

    Muito obrigado pelo retorno..
    Foram essas modificações mesmo que tive que fazer..e algumas condições.
    Agora deu certo.

    Muito obrigado pela ajuda.

    Abraços

    Lupiva,

    Ok, perfeito.

    Por gentileza, identifique e marque a resposta correta que lhe ajudou.


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

    quinta-feira, 14 de janeiro de 2021 19:02
  • Lupiva,

    Estou compartilhando uma outra solução caso não queira fazer uso do operador Cross ou Outer Apply, que consiste na adoção do operador Union aplicado dentro de um Select Derivado, veja abaixo o exemplo:

    Select Max(Maior.A) As MaiorValorPorLinha, Id_Equipamento, Tensao
    From
    (
    Select A, Id_Equipamento, Tensao From Tabela
    Union
    Select B, Id_Equipamento, Tensao From Tabela
    Union
    Select C, Id_Equipamento, Tensao From Tabela
    Union
    Select D, Id_Equipamento, Tensao From Tabela) As Maior
    Group By Id_Equipamento, Tensao
    Go


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

    sexta-feira, 15 de janeiro de 2021 11:32
  • Ola Pedro, bom dia!

    Valeu mais uma vez pela ajuda.
    Vou fazer o teste dessa forma também.

    Abraços e obrigado.

    sexta-feira, 15 de janeiro de 2021 13:11