Tengo el siguiente Db y la consulta. La consulta toma dos parámetros: la columna de clasificación y la dirección. Sin embargo, tengo que agregar una ordenación personalizada a la consulta (basado en que el Fuji debe estar primero y Gala el segundo, etc.). Esta parte también funciona pero crea código duplicado en mi consulta. Debido a eso, estoy bastante seguro de que la gente no me dejará verificar esto. Entonces mi pregunta es: ¿hay alguna manera de no duplicar la declaración CASE?Orden de clasificación personalizado: cómo no duplicar la instrucción Case
CREATE TABLE Fruits (
[type] nvarchar(250),
[variety] nvarchar(250),
[price] money
)
GO
INSERT INTO Fruits VALUES ('Apple', 'Gala', 2.79)
INSERT INTO Fruits VALUES ('Apple', 'Fuji', 0.24)
INSERT INTO Fruits VALUES ('Apple', 'Limbertwig', 2.87)
INSERT INTO Fruits VALUES ('Orange', 'Valencia', 3.59)
INSERT INTO Fruits VALUES ('Pear', 'Bradford', 6.05)
DECLARE @sortColumnName nvarchar(MAX) = 'Variety'
DECLARE @sortDirection nvarchar(MAX) = 'ASC'
SELECT ROW_NUMBER() OVER (ORDER BY
CASE WHEN @sortColumnName = 'Variety' AND @sortDirection = 'ASC'
THEN
CASE f.Variety
WHEN 'Fuji' THEN 1
WHEN 'Gala' THEN 2
ELSE 3
END
END ASC,
CASE WHEN @sortColumnName = 'Variety' AND @sortDirection = 'DESC'
THEN
CASE f.Variety
WHEN 'Fuji' THEN 1
WHEN 'Gala' THEN 2
ELSE 3
END
END DESC), *
FROM Fruits f
¡Gracias!