안녕하세요..
조회 조건에 사용자가 입력 한 소팅 조건을 받아 소팅하도록 하고자 합니다.
declare
@strDat1 varchar(1). -- 1 : AAA, 2 : BBB, 3 : CCC
@strDat2 varchar(1) -- A : 오른차순 소팅, D : 내림차순 소팅
select row_number() over
(order by case @strDat1 when '1' then AAA case @strDat2 when 'A' then ASC else DESC end
when '2' then BBB case @strDat2 when 'A' then ASC else DESC end
when '3' then CCC case @strDat2 when 'A' then ASC else DESC end end) rownum..
이렇게 해도 오류가 발생이 되고,
select row_number() over
(order by case @strDat1 when '1' then AAA
when '2' then BBB
when '3' then CCC end case @strDat2 when 'A' then ASC else DESC end ) rownum..
이렇게 해도 오류가 발생되네요..
row_number에서 case 문을 2번 사용할수 없나요?
첫번째 case는 컬럼을 선택하는 것이고,
두번째 case는 내림차순 오름차순으로 사용하고자 합니다.
페이징 처리 때문에 하단에서 ORDER BY 에서 소팅을 할수 없고,
ROW_NUMBER()를 구할때 해줘야 할것 같습니다.
조언 부탁 드리겠습니다.
Comment 4
-
Terry
2017.06.13 16:45
-
건우아빠
2017.06.13 17:07
row_number에 case를 두번 사용못하는게 아니라 asc/desc 부분은 case 문을 사용할 수 없어서 발생...select case when @strDat2 = 'A' thenROW_NUMBER() over ( order by case @strDat1 when '1' then AAA when '2' then BBB when '3' then CCC end ASC)elseROW_NUMBER() over ( order by case @strDat1 when '1' then AAA when '2' then BBB when '3' then CCC end DESC)end, * -
호짱
2017.06.14 10:04
해결 방법을 알려 주셔서 감사합니다.
또 하나 배웠습니다.
-
디비하는조씨
2017.06.27 10:59
숫자일 경우 음수를 곱하는 방법을 사용 할 수도 있죠
2가지중 하나로 택일하심이..
sp일 것으로 예상이 되는데요..
1. 변수를 토대로 if 구문 사용하여, 각 변수의 값에 맞는 쿼리 작성
예) IF @strDat1= '1'
begin
IF @strDat2 = 'A'
bein
--쿼리문 작성
end
end
2. 동적쿼리로 처리..
그럼 수고하세요~