Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema con CASE

Estas en el tema de Problema con CASE en el foro de SQL Server en Foros del Web. Buen lunes gente del foro, tengo el siguiente problema: Tengo una consulta dinamica, en la cual segun las variables recibidas devuelve las filas en un ...
  #1 (permalink)  
Antiguo 18/02/2013, 07:22
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Problema con CASE

Buen lunes gente del foro, tengo el siguiente problema:
Tengo una consulta dinamica, en la cual segun las variables recibidas devuelve las filas en un orden u otro.

Código SQL:
Ver original
  1. ORDER BY
  2. -- Orden x marca y precio descendente
  3. CASE WHEN @marca = 'marca' AND @precio = 'desc'
  4. THEN marca END ASC, precio DESC,
  5. -- Orden x marca y precio ascendente
  6. CASE WHEN @marca = 'marca' AND @precio = 'asc'
  7. THEN marca END ASC, precio ASC


Para tal caso utilice CASE, pero el problema es que solo funciona correctamente el primer CASE.
Cuando paso las variables para que se ejecute el segundo CASE (marca y precio ASC), se ejecuta el precio DESC.
Estoy casi seguro que es un error de sintaxis, alguna idea o comentario?...

Última edición por chuekeron; 18/02/2013 a las 07:30
  #2 (permalink)  
Antiguo 18/02/2013, 07:53
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Problema con CASE

Creo que siempre te los ordenara de esa forma porque tienes el 'END' antes de ordenar,
esa linea de código deberia ser algo asi:
'THEN marca ASC, precio DESC END'

Sin embargo te recomiendo que hagas esto:
ORDER BY
CASE WHEN @marca = 'marca' AND @precio = 'desc'
THEN marca ASC, precio DESC ELSE marca ASC, precio ASC END

Espero te sirva, Saludos
  #3 (permalink)  
Antiguo 18/02/2013, 08:03
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Problema con CASE

Cita:
Iniciado por leo_acn Ver Mensaje
Creo que siempre te los ordenara de esa forma porque tienes el 'END' antes de ordenar,
esa linea de código deberia ser algo asi:
'THEN marca ASC, precio DESC END'

Sin embargo te recomiendo que hagas esto:
ORDER BY
CASE WHEN @marca = 'marca' AND @precio = 'desc'
THEN marca ASC, precio DESC ELSE marca ASC, precio ASC END

Espero te sirva, Saludos
En ambos casos arrojo el siguiente caso:

Sintaxis incorrecta cerca de la palabra clave 'ASC'.

Había intentando anteriormente de esa manera, pero parece que THEN tiene dificultades para evaluar dos condiciones en el ORDER BY, o mejor dicho yo no lo estoy haciendo bien.
Viendo diversos foros llegue al código que puse hoy, pero tal como dije solo procede bien con el primer CASE.

Se me paso mencionar que el ORDER BY en cuestión esta dentro de un OVER().
  #4 (permalink)  
Antiguo 18/02/2013, 08:18
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Problema con CASE

Tienes toda la razon, te ayudare a encontrar la solución, si encuentro algo te aviso ;)
  #5 (permalink)  
Antiguo 18/02/2013, 08:58
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Problema con CASE

Tal vez el problema esta en la forma de encarar la consulta.
Finalmente probe de esta manera (mucho + simple):

Código SQL:
Ver original
  1. ORDER BY
  2. -- Orden x marca
  3. CASE WHEN @marca = 'marca'
  4. THEN marca END ASC,
  5. -- Orden x precio descendente
  6. CASE WHEN @precio = 'desc'
  7. THEN precio END DESC,
  8. -- Orden x precio ascendente
  9. CASE WHEN @precio = 'asc'
  10. THEN precio END ASC

No sabia que se ejecutarian todos los cases que estén bajo la condición WHEN.
Es decir, si el SP recibe las variables "marca" y "precio", ejecuta según los dos CASES correspondientes. Si en cambio solo recibe una variable, "marca" o "precio"... ordena según dicho criterio.
Era mucho mas simple de lo que pensé.
De todas maneras si hay alguna recomendación o critica al respecto, estoy atento.
  #6 (permalink)  
Antiguo 18/02/2013, 09:08
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Problema con CASE

hice unas pruebas y me di cuenta de lo mismo, al final llegue a la misma solución que tu ;)
Saludos

Etiquetas: case, sintaxis
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:01.