정렬을 동적으로 바꾸기 


MS도구 들이 언어들이 모드 그렇지만 편의성을 많이 제공한다.
이게 장점일수도 단점일수도 있지만.
(요즘 들어 단점이라 생각이 든다.)
하여튼 MSSQL 은 참 편리하다. 프로시져 개발하기 가장 좋은 매니저먼트를 제공하기 때문에
인풋과 아웃풋만 정해주면 자유롭게 프로시져 안에서 로직을 구현할수 있다.

그중에 가장 많이 쓰는 방법인 CASE를 활용해 정렬을 바꾸어 보려고 한다.
하지만 이 방법은 성능적으론 추천하지 못한다.
조금 간단하고 데이터가 적은 로직에 쓰길 바란다.
(참고로 CASE를 이용한 조건절 바꾸기는 타 DB에도 쓸수 있다.)



아래 쿼리를 확인해보자
Order by 안에 CASE를 활용 하여 IF를 걸었다.
그리고 해당 값일 경우 컬럼의 정렬을 바꾼다


BEGIN
DECLARE @ORDERBY VARCHAR(50)
SET @ORDERBY = 'phone'
                                           
SELECT * FROM Board
     Order By case when @ORDERBY = 'name' then name end desc,
     case when @ORDERBY = 'phone' then phone   end asc
                                                                                           
END


위 쿼리를 확인해보자
Order bt 안에 CASE를 활용 하여 IF를 걸었다.
그리고 해당 값일 경우 컬럼의 정렬을 바꾼다.

외부에서 ORDERBY에 값만 담아주면 프로시져에서 해당과 같이
기획자가 새로운 정렬을 요구한다면 그저 
HTML에 SELCT 박스만 추가해주면 되고
프로시져에
  case when @ORDERBY = 'addr' then phone   end asc
이런식으로 한줄만 추가하면 된다.





마무리

CASE를 잘쓰면 가독성이 높아집니다.

그리고 성능은 떨어집니다.

그럼 뭐가 답이냐고요? 잘 조절하여 쓰면 됩니다.

댓글을 달아 주세요