Un dia en gtalk...
Jaime:
cambiando de tema. te propongo un problema de Ordenacion con sql a ver si lo sacas?
yo lo estoy meditando
creo que lo tengo
Pedro:
okis
pero yo estoy muy verde
Jaime:
SELECT id FROM tabla
1, 2, 3 ,4
SELECT id FROM tabla ORDER By Id
1, 2, 3, 4
Hadme una SQL para que de
2, 1, 3, 4
Pedro:
y supongo que no hay otro campo que nos permita ordenarlo con lógica, ¿no?
Jaime:
la logica es que van ordenados pero primero tiene que salir el registro 2
ordenados por id
solo tiene el campo id la tabla
Pedro:
¿¿??
te interesa el 2 y despues el resto?
Jaime:
sip
mis motivos tengo
Pedro:
okis, y porqué no sacas el 2 y despues el resto?
en plan subselect y punto?
Jaime:
con una select please :D
no
caca
Pedro:
lo sé
Jaime:
subselect ya sabes que caca
Pedro:
sipe
¿union?
lo sé kk
Minutos mas tarde...
Jaime:
te rindes?
la verda es que no se si sera mas obtimo :P
optimo
Pedro:
estoy pensando en group by y having
pero creo que necesitas de todas formas una subselect...
Jaime:
abs te suena ?
Pedro:
nope
Jaime:
valor absoluto de un numero
Pedro:
okis
Jaime:
SELECT *, ABS((id - 2)) AS CampoOrden FROM tabla ORDER BY CampoOrden
En mi caso ademas tengo que ordenar por id tambien
por motivos que no vienen al caso
como me mola SQL ;D
Pedro:
sipe, a mi me mola mucho
pero no termino de ver el ABS
Jaime:
id es unico
vale?
Pedro:
sipe
por cierto, eso es solo de transact estoy viendo
por eso no me sonaba con lo buueno que soy yo
;;-)
y oracle
Jaime:
1 - 2 = -1; Abs(-1) = 1
2 - 2 = 0; Abs(0) = 0
3 - 2 = 1; Abs(1) = 1
etc
lo ves?
el sql server se lo zampa
Pedro:
que guay, si señor
Jaime:
y el oracle seguro que tambien
ten en cuenta que las operaciones matematicas son demasiado indispensables para hacerlas solo con transact
sobre todo el abs
Minutos despues...
Pedro:
falsa alarma, el abs parece sql de pura cepa
Jaime:
ya te dije
Minutos despues...
Jaime:
y complicandolo un poco
si quires que salga primero el 2 luego el 3 y luego el 4 y despues los que quedan?
:D
2, 3, 4, ....
como me gusta bombardearte el cerebro
XD
Minutos despues...
Pedro:
¿no valdría unos cuantos "FIRST"?
Jaime:
?
no se
olvida 2, 3, 4
imagina 4, 2, 5
y despues el resto
tendrias que hacer 3 orders
con abs cada uno...
creo... XD
tampoco lo he pensao mucho
Pedro:
yo no creo que interesase ABS para eso
Jaime:
no?
como lo harias
lo de los 3 orders olvidalo
que no rularia....
Pedro:
SELECT FIRST(id+3), FIRST(id+1),FIRST(id+4) FROM ...
Jaime:
y te daria :
Servidor: mensaje 195, nivel 15, estado 10, línea 1
'FIRST' no es un nombre de función reconocido.
XD
Pedro:
¿¿??
http://www.w3schools.com/sql/func_first.asp
Jaime:
XD
mamon
Pedro:
¿por?
a ver si quieres que tenga todas las funciones en la cabeza
xDD
Jaime:
no rula en sql server
Pedro:
¿y el case?
creo que valdria
http://technet.microsoft.com/es-es/library/ms181765.aspx
de hecho creo que sería la mejor solución
Jaime:
?
estas fumao
XD
hadlo con case
Pedro:
siempre
Jaime:
a ver como lo haces
FIRST = TOP 1
Pedro:
sipe
es el mismo principio que con ABS pero no ordena el resto
Jaime:
pero tienes que hacer union
ein?
XD
Pedro:
no si lo haces con un group by...
... no westoy muuy seguro de eso
Jaime:
Si haces SELECT TOP 1 id FROM tabla
te da 1
no 2
estas mu oxidao
Pedro:
hay que ponerlo en el where
Jaime:
que jodio
XD
y union
XD
Pedro:
no deberías
Jaime:
????
Pedro:
por un lado lo del CASE:
en el linkl que te he mandado
Jaime:
pedro
Pedro:
SELECT ProductNumber, Category =
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
END,
Name
FROM Production.Product
ORDER BY ProductNumber;
Jaime:
dices barbaridades
Pedro:
¿eso no valdría?
Jaime:
como?
had la select para el ejemplo que te he puesto
piensalo
por dios
Pedro:
utilizas lo de ese ejemplo como alias para luego ordenarlo
si pienso no escribo
xDD
Jaime:
se nota
XD
Minutos despues...
Pedro:
SELECT id, ordenacion =
CASE id
WHEN 4 THEN 1
WHEN 2 THEN 2
WHEN 5 THEN 3
THEN 'Other sale items'
ELSE ABS(id+4)
FROM tabla
ORDER BY ordenacion;
habría que pdrobarlo y pulislo pero cfreo que valdría
de todas formas yo no sé transact
xD
Minutos despues...
Jaime:
claro
XD
Pedro:
no vale lo del case o qué?
mira que yo lo veo viable
xD
Jaime:
voy a probar
a ver
que me parece que hasta tienes razon
Pedro:
no te veo convencido
xD
Jaime:
no puedes hacerlo
o lo he hecho yo mal
Pedro:
yo diría que si que tiene que valer auqneu a lo mejor no exáctamente tal como lo he escrito
por cietrto otra forma de acerlo:
¿conoces el WITH de transact
y el ROWLOCK?
Jaime:
nop
Pedro:
promete, tu mientras ves mirando mi CASE
xD
Minutos despues...
Jaime:
mu guay el case
rula
te faltaba poner el end
Pedro:
soy el puto amo ^_^
xD
eso es porque mis comandos nunca terminan, se van a salvar a gatitos en los arboles cuando ya no se les necesita
xD
Jaime:
SELECT id, ordenacion =
CASE id
WHEN 4 THEN 1
WHEN 2 THEN 2
WHEN 5 THEN 3
ELSE ABS(id+4)
END
FROM tabla
ORDER BY ordenacion;
XD
esto es para poner un post :P
Pedro:
sipe, haz un copypaste ¿capado? del chat en finkalinux
Jaime:
pero creo sera mas rapido el abs para un solo resultado
Pedro:
^_^
seguro
Jaime:
me refiero para ordenar primero un registro
Pedro:
pero tu habías pedi 3 cabrón!!!
Jaime:
XD
pa 3 lo solucionaste tu
aunque te falto algo de sintaxis
XD
Pedro:
cerda!
jueves, 5 de julio de 2007
Un problema de esecueles
Publicado por moz667 los 12:46 p. m.
Etiquetas: bases de datos, ordenacion, sql
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario