En MS SQL Server 2005, estoy escribiendo una consulta con clasificación condicional y mi problema es que no sé cómo puedo ordenar condicional usando dos columnas.
Si escribí un código como este, está funcionando normalmente
select
*
from
table
order by
case @pkr
when 'kol' then kol
when 'nci' then nci
end
No sé cómo hacer un pedido condicional para dos o más columnas.
select
*
from
table
order by
case @pkr
when 'KOL-NCI' then kol,nci
when 'kol-MPCI' then kol,mpci
end
¿Existe una idea para hacer TSQL dinámico y usarlo sp_executesql
pero todavía estoy buscando una mejor idea?
sql-server
order-by
adopilot
fuente
fuente
CASE
pueden ser aplicables a este caso.Respuestas:
Admito que nunca he tenido que hacer esto antes, así que hubo un poco de rascarse la cabeza. Tabla de ejemplo simple para demostrar:
Usando un parámetro @SortStyle para diferenciar entre las órdenes de clasificación, @SortStyle = 1 ordenará por
col1 ASC, col2 DESC
y @ SortStyle = 2 ordenará porcol2 DESC, col1 ASC
.¿Cómo ORDER BY un parámetro cubre el caso más simple de ordenar por solo 1 columna?
fuente
Suponiendo que tiene más casos (agregué uno) y todos los tipos son compatibles,
No es una clasificación de varias columnas: tiene una clasificación primaria, seguida de una clasificación secundaria. Solo mira el cuadro de diálogo de clasificación en Excel para ver a qué me refiero.
fuente
Con el ejemplo que das es simple:
Siempre es bueno evitar el SQL dinámico siempre que sea posible
fuente