none
Select? RRS feed

  • Pergunta

  •  

    Bom dia prezados,

     

     Tenho uma tablea de categorias:

     

    ID            Descricao

    1             TV

    2             Aparelho de som

    3             DVD

    4             Computador

     

    Minha dúvida é a seguinte, tenho de dar um select que me mostre o DVD em primeiro e os restantes em ordem alfabetica, como faço isso?

     

    Grato

    quinta-feira, 2 de outubro de 2008 14:13

Respostas

  • Tenta isso ai..
    select * from categoria where descricao like 'DV%' 
    union all
    select * from categoria where descricao not like 'DV%' 
    quinta-feira, 2 de outubro de 2008 14:32
  • Marcelo,

     

    Isso mesmo, quando se utilizar o comando Union All, o order by só pode ser declarado após o último Select, e ele ira ordenar os dados em todos os selects!!!

     

    quinta-feira, 2 de outubro de 2008 16:01
  • Boa Tarde,

     

    Veja o exemplo abaixo:

     

    Code Snippet

    create table #tbl (ID INT, Nome VARCHAR(50))

    INSERT INTO #tbl VALUES (1,'TV')

    INSERT INTO #tbl VALUES (2,'Aparelho de som')

    INSERT INTO #tbl VALUES (3,'DVD')

    INSERT INTO #tbl VALUES (4,'Computador')

     

    SELECT ID, Nome FROM (

    select ID, Nome, 1 as Ord FROM #tbl WHERE Nome = 'DVD'

    UNION ALL

    select ID, Nome, 2 as Ord FROM #tbl WHERE Nome != 'DVD') AS Q

    Order By Ord

     

     

    Em todo caso, recomendo rever o seu modelo de dados. Não é comum a ordem fazer diferença nesse nível (não há nenhum atributo que simplesmente faça sentido essa ordem. Se o DVD tem de vir na frente é porque existe algum motivo e se esse motivo existe deve ser contemplado no modelo.

     

    [ ]s,

     

    Gustavo

     

    quinta-feira, 2 de outubro de 2008 16:47
  • Gustavo,

     

    Da forma que estava o select ainda não estava retornando em ordem alfabética, aproveitei seu código e ficou assim:

     

    Code Snippet

     

    SELECT ID, descricao FROM (select ID, descricao, 1 as Ord FROM categoria WHERE descricao = 'DVD'

    UNION ALL

    select ID, descricao, 2 as Ord FROM categoria WHERE descricao != 'DVD') as Q

    Order By ord,Q.descricao

     

     

     

    quinta-feira, 2 de outubro de 2008 17:16

Todas as Respostas

  • Tenta isso ai..
    select * from categoria where descricao like 'DV%' 
    union all
    select * from categoria where descricao not like 'DV%' 
    quinta-feira, 2 de outubro de 2008 14:32
  • Esse comando fez a junção que eu precisava, mas se eu dou um order by no segundo select ele ordena tudo

    quinta-feira, 2 de outubro de 2008 15:47
  • Marcelo,

     

    Isso mesmo, quando se utilizar o comando Union All, o order by só pode ser declarado após o último Select, e ele ira ordenar os dados em todos os selects!!!

     

    quinta-feira, 2 de outubro de 2008 16:01
  • Tem forma de ordenar somente o segundo select?

     

    quinta-feira, 2 de outubro de 2008 16:15
  • Boa Tarde,

     

    Veja o exemplo abaixo:

     

    Code Snippet

    create table #tbl (ID INT, Nome VARCHAR(50))

    INSERT INTO #tbl VALUES (1,'TV')

    INSERT INTO #tbl VALUES (2,'Aparelho de som')

    INSERT INTO #tbl VALUES (3,'DVD')

    INSERT INTO #tbl VALUES (4,'Computador')

     

    SELECT ID, Nome FROM (

    select ID, Nome, 1 as Ord FROM #tbl WHERE Nome = 'DVD'

    UNION ALL

    select ID, Nome, 2 as Ord FROM #tbl WHERE Nome != 'DVD') AS Q

    Order By Ord

     

     

    Em todo caso, recomendo rever o seu modelo de dados. Não é comum a ordem fazer diferença nesse nível (não há nenhum atributo que simplesmente faça sentido essa ordem. Se o DVD tem de vir na frente é porque existe algum motivo e se esse motivo existe deve ser contemplado no modelo.

     

    [ ]s,

     

    Gustavo

     

    quinta-feira, 2 de outubro de 2008 16:47
  • Boa Gustavo!

     

    O Gustavo tem razão...se o DVD tem que vir na frente a ordem dos demais não importa.

    quinta-feira, 2 de outubro de 2008 17:01
  • Gustavo,

     

     Esse select irá preencher um dropdown quando meu usuario quiser mudar a categoria de algum produto.

     

     Em primeiro fica a categoria atual do produto e logo abaixo segue a lista das demais categorias.

     Existe forma melhor de fazer isso?

     

    quinta-feira, 2 de outubro de 2008 17:04
  • Gustavo,

     

    Da forma que estava o select ainda não estava retornando em ordem alfabética, aproveitei seu código e ficou assim:

     

    Code Snippet

     

    SELECT ID, descricao FROM (select ID, descricao, 1 as Ord FROM categoria WHERE descricao = 'DVD'

    UNION ALL

    select ID, descricao, 2 as Ord FROM categoria WHERE descricao != 'DVD') as Q

    Order By ord,Q.descricao

     

     

     

    quinta-feira, 2 de outubro de 2008 17:16
  • David,

     

     Importa sim, a busca pela nova categoria fica mais clara para o usuario se estiver em ordem alfabetica (quando houver umas 15 categorias ou mais) o dropdown e se ele não achar nenhum categoria que sirva a seus propósitos, saberá que a primeira é a que estava selecionada.

     

    Obrigado pela ajuda rapaziada., valeu!

     

    quinta-feira, 2 de outubro de 2008 17:17
  • Nesse caso sim pq vai para o dropdown, entendi.

     

    quinta-feira, 2 de outubro de 2008 17:19