Thursday, April 26, 2012

Usar case en claúsula order By

La verdad es que yo nunca he utilizado el CASE dentro de un ORDER BY. Pero hoy aprendí a hacerlo :) Tal vez me sirva más adelante. Aun no he pensado en el beneficio que pueda sacar de esta característica. 

Es sencillo, voy a dejar dos ejemplos. Por si acaso, cogí la primer tabla que vi cuando abrí mi base de datos y la adapté para dicho ejemplo. Todo con fines académicos, no lo veo para implementarlo en la vida real, no este ejemplo, jeje. :) 

(Probado en Microsoft SQL Server 2008)

Con parámetros.
Le mando la columna con la cual se ordenará y si se ordenará de manera ascendente o descendente.

DECLARE @columna varchar(50)
    SET @columna = 'tipo_registro'
    
 DECLARE @orden varchar(4)
    SET @orden = 'ASC'

 DECLARE @mix varchar(55)
    SET @mix = @columna + ':' + @orden

SELECT * FROM com.Contrato WHERE cod_cliente in (29,30)
ORDER BY


 CASE
        WHEN (@mix = 'tipo_registro:ASC')
        THEN tipo_registro
    END ASC,
    CASE
        WHEN (@mix = 'tipo_registro:DESC')
        THEN tipo_registro
    END DESC
 
 

Con condición. 
Ordenará por cierta columna de acuerdo a una condicionante.

SELECT * FROM com.Contrato WHERE cod_cliente in (29,30)
ORDER BY
 CASE
  WHEN cod_cliente=29
  THEN tipo_registro
  END,
 CASE
  WHEN cod_cliente=30
  THEN nro_contrato
  END 

HaPPy CoDiNg =)

No comments:

Post a Comment