Dúvida SQL - order by

14 respostas
O

Não sei se aqui é o melhor lugar, mas

Tem uma tabela no sql q tem data e o turno(manha, tarde ou noite), só q eu tenho q q fazer uma consulta q ordene pela data e pelo turno. alguém sabe como fazer? só q o campo data tá como date e o turno varchar.

14 Respostas

T
select * from tabela order by data, turno
Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC
select * from tabela order by data, turno DESC
J

você trabalhando com Date no BD e fazendo order by pelo campo data ele já não pega os registro ordenados?

Acho que não entedi direito o que você deseja.

poste mais alguma informação ai pra ver se consigo ajudar em algo.

A

Consegue me dizer os campos e as tabelas??

xD~~

J

era o que foi postado acima que você deseja?

O

vou dar 1 exemplo:

tenho esses 4 registros gravados:

id,nome, data, turno

1, fulano, 04/01/2010,noite
  2, ciclano, 04/01/2010, tarde
  3, beltrano, 04/01/2010, manha
  4, outrano, 05/01/2010, noite

eu queria ordernar pela data e o turno, só q com o turno em 1 ordem específica, 1° manhã, 2° tarde e 3° noite

ae ficaria assim:

3, beltrano, 04/01/2010, manha
  2, ciclano, 04/01/2010, tarde
  1, fulano, 04/01/2010,noite
  4, outrano, 05/01/2010, noite
T

Ele usa a ordem natural dos dados das colunas.

Você pode tentar o seguinte caso esteja usando oracle

select nome, data, turno, decode(turno, 'manha', 1, 'tarde', 2, 'noite', 3) a from tabela order by a, data

ou pode pesquisar algo parecido no seu banco.

Uma outra alternativa é tentar ordenar isso no java, mas daí fica oneroso para o server

A

O código abaixo é o que você quer!

[quote=thiago.correa]select * from tabela order by data, turno
Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC

O

po, eu to usando o sql server, tem algo parecido com o q vc citou acima ou será que funciona lá?

T

Dá uma conferida na documentação do teu servidor de banco de dados, é bem provavel que sim, só não garanto que seja com o mesmo nome!!!

O

[quote=Alberes]O código abaixo é o que você quer!

[quote=thiago.correa]select * from tabela order by data, turno
Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC

Alberes, não pq assim o turno não ficaria ordernado por manhã, tarde e noite e sim por ordem alfabética ascendente ou descendente…

O

Vlw cara, vou dar uma procurada por isso, já é um caminho a se seguir. Obrigado

O

Consegui, no sql server tem case q funciona semelhante ao decode do oracle. só pra postar a resposta aqui caso alguém no futuro venha precisar vou mostrar como ficou:

select id,nome, data, turno, (case When turno ='Manhã' then 1 When turno ='Tarde' Then 2 When turno ='Noite' then 3) as ordem from tabela order by data asc, ordem asc

Obrigado ae galera do GUJ!

A

Entendi.

Não tenho mysql para testar, mas você pode fazer algo assim.

SELECT
    nome, data, turno, SUBSTRING(a FROM 3)
    (select nome, data, turno, decode(turno, '1 manha', 1, '2 tarde', 2, '3 noite', 3) a from tabela order by a, data)
FROM tabela

A minha dúvida é essa função decode, não conheço, mas de qualquer forma tem uma outras funções.

Link com as funções para strings

http://www.tutorialspoint.com/mysql/mysql-string-functions.htm

R

Segue a query que resolverá o seu problema:

select * from tabela
order by data,case turno when ‘manha’ then 1 when ‘tarde’ then 2 when ‘noite’ then 3 end

Criado 4 de janeiro de 2010
Ultima resposta 10 de mar. de 2011
Respostas 14
Participantes 6