Posteado por: eurecadigital | septiembre 3, 2009

Utilizar un campo calculado en una clausula WHERE

Algunas vescesnos encontramos con una select de este tipo:

SELECT CASE WHEN campo1 = 1 THEN 'R'
CASE WHEN campo1 = 2 THEN 'Y'
ELSE 'T'  as 'Value'
FROM TABLA
WHERE Value = 'R'

Esto nos dará un error de columna invalida (campo Value)
Se debe a que sql Server evalua en el siguiente orden:

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. HAVING
  7. SELECT
  8. ORDER BY

Con lo cual al intentar evaluar el WHERE antes que la SELECT da un error de campo desconocido. Para solucionar esto existe un truco sencillo:

SELECT T.* FROM (SELECT CASE WHEN campo1 = 1 THEN 'R'
CASE WHEN campo1 = 2 THEN 'Y'
ELSE 'T' END as 'Value', campo2, campo3, campo4
FROM TABLA) as T
WHERE T.Value = 'R'

Responses

  1. jajaj, muy buena amigo

  2. Me has resuelto una duda que tenía desde hace muuuucho tiempo. Qué fácil es cuando se sabe SQL de verdad, MUCHAS GRACIAS🙂

  3. Esto me sirvió muchísimo… Una consulta que tengo algo compleja, tubo una mejora de hasta un 80% más rápida en su ejecución… Gracias por tu lección…


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: