다음 Db 및 쿼리가 있습니다. 쿼리는 정렬 열과 방향의 두 가지 매개 변수를 사용합니다. 그러나 사용자 지정 정렬을 쿼리에 추가해야합니다 (Fuji가 먼저 시작해야하고 Gala가 두 번째가되어야 함 등). 이 부분도 작동하지만 내 쿼리에는 중복 코드가 생성됩니다. 그 때문에, 나는 사람들이 내가 이것을 체크인하도록 내버려 두지 않을 것이라고 확신한다. 그래서 나의 질문은 : 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
고마워요!