Ordenacion no alfabetica de consulta

10/03/2005 - 10:50 por Oriol | Informe spam
Hola a todos,

Tengo un problema y no se si tiene solucion.

Tengo una consulta que debo ordenar por un campo con un orden muy en
concreto que no sigue ningun orden alfabetico ni nada.

El tema es que el registro por el que quiero ordenar contiene un caracter
dentro de estas 3 posibilidades (M/G/L).

El tema es que primero deben aparecer los que contienen una "M", despues los
de la "G" y por ultimo los de la "L". Como podeis ver, no tienen ningun
orden. Como puedo indicarle al ORDER BY que me ordene segun este orden? Es
esto posible?

Mil gracias de antemano.

Atentamente,
Oriol.

Preguntas similare

Leer las respuestas

#1 Ivan Pascual
10/03/2005 - 10:59 | Informe spam
Vamos a ver...
Yo me crearia un campo numerico donde los registros de
M > 1
G > 2
L > 3

Y ordeno por ese campo numerico...

Te sirve??

Ivan Pascual
Respuesta Responder a este mensaje
#2 Oriol
10/03/2005 - 12:10 | Informe spam
Hola Ivan,

Evidentemente, esta seria una de las soluciones mas faciles, pero el
problema es que no podemos modificar la base de datos, con lo cual, no
podemos añadir este campo al registro. Por eso que preguntaba como se podria
ordenar teniendo solo en cuenta esta campo.

Gracias.

Un saludo.
Oriol.

"Ivan Pascual" escribió en el mensaje
news:
Vamos a ver...
Yo me crearia un campo numerico donde los registros de
M > 1
G > 2
L > 3

Y ordeno por ese campo numerico...

Te sirve??

Ivan Pascual

Respuesta Responder a este mensaje
#3 Ivan Pascual
10/03/2005 - 12:25 | Informe spam
No hace falta modificar tablas de la base de datos...
En un Store procedure te creas una tabla temporal y la llenas con los
registros necesarios con un campo mas que sea IdOrden.

Quiza puedas crearte incluso un vista de esa tabla con el campo mencionado.

Si no es así...
Deberas ordenarla a mano con algun cursor o algo similar... pero no lo
probaria de hacer, sería muy lento...

Ivan Pascual
Respuesta Responder a este mensaje
#4 Alejandro Mesa
10/03/2005 - 13:57 | Informe spam
Oriol,

Puedes usar una expresion CASE en la clausula ORDER BY.

Ejemplo:

use northwind
go

create table t (
colA int not null identity unique,
colB char(1) not null check(colB in ('M', 'G', 'L')),
colC varchar(25) not null
)
go

insert into t (colB, colC) values('L', 'uno')
insert into t (colB, colC) values('L', 'dos')
insert into t (colB, colC) values('L', 'tres')

insert into t (colB, colC) values('G', 'cuatro')
insert into t (colB, colC) values('G', 'cinco')
insert into t (colB, colC) values('G', 'seid')

insert into t (colB, colC) values('M', 'siete')
insert into t (colB, colC) values('M', 'ocho')
insert into t (colB, colC) values('M', 'nueve')
go

select
colA,
colB,
colC
from
t
order by
case
when colB = 'M' then 1
when colB = 'G' then 2
when colB = 'L' then 3
else 4
end asc,
colA asc
go

drop table t
go


AMB

"Oriol" wrote:

Hola a todos,

Tengo un problema y no se si tiene solucion.

Tengo una consulta que debo ordenar por un campo con un orden muy en
concreto que no sigue ningun orden alfabetico ni nada.

El tema es que el registro por el que quiero ordenar contiene un caracter
dentro de estas 3 posibilidades (M/G/L).

El tema es que primero deben aparecer los que contienen una "M", despues los
de la "G" y por ultimo los de la "L". Como podeis ver, no tienen ningun
orden. Como puedo indicarle al ORDER BY que me ordene segun este orden? Es
esto posible?

Mil gracias de antemano.

Atentamente,
Oriol.



Respuesta Responder a este mensaje
#5 Oriol
10/03/2005 - 17:07 | Informe spam
Hola Alejandro,

Tu solucion me ha funcionado perfectamente, y sin crear ninguna vista ni
tabla temporal.

Simplemente he cambiado la clausula ORDER BY por el CASE y ha funcionado.

Gracias de nuevo a todos.

Saludos.
Oriol.

"Alejandro Mesa" escribió en el
mensaje news:
Oriol,

Puedes usar una expresion CASE en la clausula ORDER BY.

Ejemplo:

use northwind
go

create table t (
colA int not null identity unique,
colB char(1) not null check(colB in ('M', 'G', 'L')),
colC varchar(25) not null
)
go

insert into t (colB, colC) values('L', 'uno')
insert into t (colB, colC) values('L', 'dos')
insert into t (colB, colC) values('L', 'tres')

insert into t (colB, colC) values('G', 'cuatro')
insert into t (colB, colC) values('G', 'cinco')
insert into t (colB, colC) values('G', 'seid')

insert into t (colB, colC) values('M', 'siete')
insert into t (colB, colC) values('M', 'ocho')
insert into t (colB, colC) values('M', 'nueve')
go

select
colA,
colB,
colC
from
t
order by
case
when colB = 'M' then 1
when colB = 'G' then 2
when colB = 'L' then 3
else 4
end asc,
colA asc
go

drop table t
go


AMB

"Oriol" wrote:

Hola a todos,

Tengo un problema y no se si tiene solucion.

Tengo una consulta que debo ordenar por un campo con un orden muy en
concreto que no sigue ningun orden alfabetico ni nada.

El tema es que el registro por el que quiero ordenar contiene un caracter
dentro de estas 3 posibilidades (M/G/L).

El tema es que primero deben aparecer los que contienen una "M", despues
los
de la "G" y por ultimo los de la "L". Como podeis ver, no tienen ningun
orden. Como puedo indicarle al ORDER BY que me ordene segun este orden?
Es
esto posible?

Mil gracias de antemano.

Atentamente,
Oriol.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida