none
Ordenação dentro da mesma tabela. RRS feed

  • Pergunta

  • Pessoal,

     

    Tenho a seguinte tabela:

     

    cd

    Nome

    Titular

    1

    Antônio

     

    2

    Bruna

     

    3

    Renata

     

    4

    Victória

    1

    5

    Emília

    1

     

    Estou povoando uma gridview com esse resultado, só que o pessoal quer colocar em ordem de nome e de dependentes, no caso da tabela acima, gostaria de receber o resultado do sql da seguinte maneira:

     

    1   Antônio

     

    Aqui, viria os dependentes do Antônio em Ordem alfabética que são:

     

    5 Emília

    4 Victória

     

    Depois o restante, sempre em ordem alfabética.

     

    2 Bruna

    3 Renata

     

    Como eu consigo efetuar uma consulta somente me retornando dessa forma?

     

    Agradeço a todos pela atenção.

    terça-feira, 7 de outubro de 2008 12:53

Todas as Respostas

  • Antonio,

     

    Você poderia postar o código que você esta utilizando para trazer os dados no gridview.

    terça-feira, 7 de outubro de 2008 13:11
  •  

    Ola bom dia ..

     

    Irei apresentar uma maneira de se fazer .. creio que tenha uma maneira mais facil de realizar a consulta ..

     

    A Tabela que criei para fazer os Testes

     

    Code Snippet
    cd          nome                           titular    
    ----------- ------------------------------ -----------
    1           Antonio                        NULL
    2           Bruna                          NULL
    3           Renata                         NULL
    4           Victoria                       1
    5           Emilia                         1

     

     

     

    Executei o seguinte select em cima desta tabela ...

     

    Code Snippet
    select a.cd, a.nome, a.titular
    from (select a.cd as Ordenacao,*
     from teste A
     where titular is null
     union
     select a.cd as Ordenacao, b.cd, b.nome, b.titular
     from teste A inner join teste B
      on a.cd = b.titular) a
    Order by a.Ordenacao, a.Nome

     

     

    Abraços

     


    terça-feira, 7 de outubro de 2008 14:06
  • Bom dia,

    Segue abaixo:

     

    Code Snippet
    select cd, nome, titular from #tb
    order by Cast( (isnull(cast(titular as varchar)+nome,cast(cd as varchar))) as varchar)

     

     

     
    Espero ter ajudado..

     

     

     

     

     

     

     

    ps.: um colega e eu desenvolvemos esta resposta.

    terça-feira, 7 de outubro de 2008 14:18
  • Boas Pessoal!

     

    Antônio, teste o código abaixo, pelo que entendi, vc precisa ordenar sempre por nome (do titular e depois dos dependentes dele) e não por código do titular e depois o nome do dependente.

     

    Utilizei esta estrutura

    Code Snippet

    create table #tb(

    cd smallint,

    nome varchar(30),

    titular smallint

    );

    insert into #tb values( 1, 'Antônio', null )

    Go

    insert into #tb values( 2, 'Bruna', null )

    Go

    insert into #tb values( 3, 'Renata', null )

    Go

    insert into #tb values( 4, 'Victória', 1 )

    Go

    insert into #tb values( 5, 'Emília', 1 )

    Go

     

     

     

    Esta é a query sugerida

    Code Snippet

    select tb.cd,

    tb.nome,

    tb.titular,

    tb.nome as caminho

    from #tb tb

    where tb.titular is null

    union

    select tbf.cd,

    tbf.nome,

    tbf.titular,

    tbp.nome + ';' + tbf.nome as caminho

    from #tb tbf,

    #tb tbp

    where tbf.titular = tbp.cd

    order by caminho

     

     

    [Editado]

    Para que você entenda o que foi feito:

    A primeira query retorna somente os titulares;

    A segunda retorna os dependentes e tem o nome do titular concatenado ao nome do dependente;

    O order by é pelo caminho, que é o nome do titular + o nome do dependente, desta forma, seus registros serão retornados sempre em ordem alfabética.

    [Fim do Editado]

     

     

    Espero ter ajudado.

     

    Abs.,

    Edmilton

    terça-feira, 7 de outubro de 2008 16:50
  • cara usa o ORDE BY nome da coluna ASC

    segunda-feira, 13 de outubro de 2008 00:37