none
Trazer valores intermediários entre o máximo e o mínimo de determinada coluna RRS feed

  • Pergunta

  • Olá pessoal,

    Tenho a seguinte query:

    select 
    min(quantidade) qtd 
    from 
    tabela 
    union 
    select 
    max(quantidade) qtd 
    from 
    tabela 

    Que me retorna o seguinte:

    qtd

    10

    20

    Só que eu quero que os valores intermediários também apareçam, como:

    qtd

    10

    11

    12

    13

    14

    15

    16

    ...

    20

    Como posso fazer isso?


    sexta-feira, 5 de dezembro de 2014 14:19

Respostas

  • Jean,

    Veja se este exemplo ajuda:

    USE TEMPDB
    Go
    
    Declare @Numeros Table
    (Numero Int)
    
    
    Set NoCount On
    
    Declare @Contador TinyInt,
            @MenorValor TinyInt,
    		@MaiorValor TinyInt
    
    Set @Contador=1
    
    While @Contador <=100
     Begin
      Insert Into @Numeros Values (@Contador)
    
      Set @Contador +=1
     End
    
    Set @MenorValor=(Select MIN(Numero) from @Numeros Where Numero <=30)
    Set @MaiorValor=(Select MAX(Numero) from @Numeros Where Numero <=30)
    
    Select @MenorValor, @MaiorValor
    
    Select @MenorValor
    Union
    Select Numero From @Numeros Where Numero Between @MenorValor+1 And @MaiorValor-1
    Union
    Select @MaiorValor

    Veja este outro exemplo como se fosse uma Stored Procedure:

    Create Procedure P_ValorIntermediarios (@TotalNumeros SmallInt, @Limitador SmallInt)
    As
    Begin
     Set NoCount On
    
     Declare @Numeros Table
     (Numero Int)
    
     
     Declare @Contador SmallInt,
            @MenorValor SmallInt,
    		@MaiorValor SmallInt
    
     Set @Contador=1
    
     While @Contador <=@TotalNumeros
      Begin
       Insert Into @Numeros Values (@Contador)
    
       Set @Contador +=1
      End
    
     Set @MenorValor=(Select MIN(Numero) from @Numeros Where Numero <=@Limitador)
     Set @MaiorValor=(Select MAX(Numero) from @Numeros Where Numero <=@Limitador)
    
     Select @MenorValor As 'Menor Valor', @MaiorValor As 'Maior Valor'
     
     Select @MenorValor
     Union
     Select Numero As 'Sequência Completa' From @Numeros Where Numero Between @MenorValor+1 And @MaiorValor-1
     Union
     Select @MaiorValor
    End
    
    
    Exec P_ValorIntermediarios 500, 250
    Go


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sexta-feira, 5 de dezembro de 2014 14:44

Todas as Respostas

  • Olá , sua placa de ter tais dados ou queires para deixar os números correlativos .
    Você tem em sua mesa é fácil, mas para usar um laço FOR

    Select quantidade from tabela

    Where quantidade between (select min(quantidade)  from tabela ) and (select max(quantidade) from tabela)

    Best Regards


    JM Claudio Dba/Consultor SQL/BI Pasiona - Spain

    sexta-feira, 5 de dezembro de 2014 14:32
  • Apareceu de uma maneira estranha e repetitiva, assim:

    qtd

    10

    10

    10

    15

    15

    15

    15

    20

    20

    20

    20

    sexta-feira, 5 de dezembro de 2014 14:43
  • Jean,

    Veja se este exemplo ajuda:

    USE TEMPDB
    Go
    
    Declare @Numeros Table
    (Numero Int)
    
    
    Set NoCount On
    
    Declare @Contador TinyInt,
            @MenorValor TinyInt,
    		@MaiorValor TinyInt
    
    Set @Contador=1
    
    While @Contador <=100
     Begin
      Insert Into @Numeros Values (@Contador)
    
      Set @Contador +=1
     End
    
    Set @MenorValor=(Select MIN(Numero) from @Numeros Where Numero <=30)
    Set @MaiorValor=(Select MAX(Numero) from @Numeros Where Numero <=30)
    
    Select @MenorValor, @MaiorValor
    
    Select @MenorValor
    Union
    Select Numero From @Numeros Where Numero Between @MenorValor+1 And @MaiorValor-1
    Union
    Select @MaiorValor

    Veja este outro exemplo como se fosse uma Stored Procedure:

    Create Procedure P_ValorIntermediarios (@TotalNumeros SmallInt, @Limitador SmallInt)
    As
    Begin
     Set NoCount On
    
     Declare @Numeros Table
     (Numero Int)
    
     
     Declare @Contador SmallInt,
            @MenorValor SmallInt,
    		@MaiorValor SmallInt
    
     Set @Contador=1
    
     While @Contador <=@TotalNumeros
      Begin
       Insert Into @Numeros Values (@Contador)
    
       Set @Contador +=1
      End
    
     Set @MenorValor=(Select MIN(Numero) from @Numeros Where Numero <=@Limitador)
     Set @MaiorValor=(Select MAX(Numero) from @Numeros Where Numero <=@Limitador)
    
     Select @MenorValor As 'Menor Valor', @MaiorValor As 'Maior Valor'
     
     Select @MenorValor
     Union
     Select Numero As 'Sequência Completa' From @Numeros Where Numero Between @MenorValor+1 And @MaiorValor-1
     Union
     Select @MaiorValor
    End
    
    
    Exec P_ValorIntermediarios 500, 250
    Go


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sexta-feira, 5 de dezembro de 2014 14:44
  • Olá

    Select quantidade from tabela

    Where quantidade between (select min(quantidade) from tabela ) and (select max(quantidade) from tabela)

    group by quantidade

    Saludos


    JM Claudio Dba/Consultor SQL/BI Pasiona - Spain

    • Sugerido como Resposta JM Claudio sexta-feira, 5 de dezembro de 2014 15:01
    sexta-feira, 5 de dezembro de 2014 15:01