jueves, 5 de julio de 2007

Un problema de esecueles

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!

No hay comentarios:

Seguidores