none
Select meio louco RRS feed

  • Pergunta

  • Tenho uma tabela com vários campos, mas quero destacar os seguintes:

    IDPassos, IDOrigem e DEscricaoCateg.

    IDPassos é PK e claro ele não repete. Mas origem sim, então eu posso ter o seguinte:

    Passos     Origem    Descricao

    1.............1...........Teste

    2.............1...........Teste2

    3.............1...........Teste3

    4.............2..........Outra Coisa

    5............2...........Outra Coisa2

    O que eu quero é o seguinte. Fazer um select que me traga o IDPassos de menor valor, pois essa é a forma de entender que esse é o passo iniciante, logo nesse select deveria trazer o IDPasso 1 e 4 apenas. Não sei como eu faço isso.

    terça-feira, 30 de outubro de 2012 19:47

Respostas

Todas as Respostas

  • Boa tarde,

    Experimente desta forma:

    with CTE as
    (
        select
            Passos,
            Origem,
            Descricao,
            ROW_NUMBER() OVER(PARTITION BY Origem ORDER BY Passos) as RowNum
        from Tabela
    )
    
    select * from CTE
    where RowNum = 1

    Espero que seja útil.


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

    terça-feira, 30 de outubro de 2012 20:02
  • pnet,

    Você deseja trazer o menu ID de cada IDOrigem?

    Se for isso, além de utilizar Common Table Expression indicada Gapimex, você poderá trabalhar com agrupamento de valores, utilizando a função Min em conjunto como o comando Group By.

    Veja o exemplo abaixo:

    Create Table Valores
     (ID Int,
      IDOrigem Int,
      Descricao Varchar(20))
      
      Insert Into Valores Values(1,1,'valor') 
      Insert Into Valores Values(2,1,'valor')
      Insert Into Valores Values(3,1,'valor')
      Insert Into Valores Values(4,1,'valor')
      Insert Into Valores Values(5,2,'valor')
      Insert Into Valores Values(6,2,'valor')
      Insert Into Valores Values(7,3,'valor')
      
      Select MIN(ID), IDOrigem, Descricao from Valores
      Group By IDOrigem, Descricao


    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]

    terça-feira, 30 de outubro de 2012 20:36
  • Não, eu tenho que trazer sempre o menor IDPassos, sempre. Ele determina o passo inicial, conforme exemplo. Em milhares de registros, eu tenho que trazer o menor IDPassos, para cada IDOrigem.
    quarta-feira, 31 de outubro de 2012 12:39
  • Só para explicar melhor. Não é o menor de todos, mas sim, todos os menores em cada conjunto de IDOrigem. Então, em 100.000 registros, eu trago, por exemplo 10.000 IDPassos, que seriam os menores dentro do conjunto ou grupo ou qualquer coisa do gênero de IDOrigens, não sei se ficou claro.
    quarta-feira, 31 de outubro de 2012 12:41
  • A query que sugeri não funcionou?

    Se a versão do SQL Server utilizada é anterior a 2005, experimente desta forma:

    select
        t.*
    from
        (select
            MIN(IDPassos) as IDPassos,
            IDOrigem
        from Tabela
        group by IDOrigem) as m
    join Tabela as t on t.IDPassos = m.IDPassos

    Se não funcionar, informe por favor o problema ocorrido.


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

    quarta-feira, 31 de outubro de 2012 12:47