ejemplos - MS Sql: ORDEN Condicional POR ASC/DESC Pregunta
order by sql server ejemplos (4)
He hecho algo como esto
select productId, InventoryCount,
case
when @Direction = 1 then InventoryCount
else -InventoryCount
end as "SortOrder"
order by 3
Quiero hacer que el orden de mi consulta sea condicional, de modo que si satisface la condición, debe ordenarse descendiendo
Por ejemplo:
SELECT * FROM Data ORDER BY SortOrder CASE WHEN @Direction = 1 THEN DESC END
No cambie el ASC
o el DESC
, cambie el signo de lo que se está ordenando:
SELECT * FROM table
ORDER BY
CASE WHEN @Direction = 1 THEN -id else id END asc;
El OP pregunta:
Chicos, no soy el experto en SQL, por favor, explícame qué significa el id y el id, ¿controla la dirección de pedido?
ID es la columna que esté clasificando; -id es solo la negación de eso, id * -1. Si está ordenando por más de una columna, deberá negar cada columna:
SELECT * FROM table
ORDER BY
CASE WHEN @Direction = 1 THEN -id else id END
CASE WHEN @Direction = 1 THEN -othercolumn else othercolumn END ;
Si está ordenando por una columna no numérica, deberá encontrar una expresión que haga que esa columna sea "negativa"; Escribir una función para hacer eso puede ayudar.
También puedes usar un esquema que soporte todos los tipos de columnas:
SELECT <column_list> FROM <table> ORDER BY CASE WHEN @sort_order = ''ASC'' AND @sort_column = ''<column>'' THEN <column> END ASC, CASE WHEN @sort_order = ''DESC'' AND @sort_column = ''<column>'' THEN <column> END DESC
SELECT *
FROM Data
ORDER BY
Case WHEN @Direction = 1 THEN SortOrder END DESC,
Case WHEN 1=1 THEN SortOrder END