by 훈미남 [SQL Query] MSSQL [2018.06.01 12:56:03]
안녕하세요.
저의 실력이 미천하여 고수님께 질문을 드려 답을 구하고자 합니다.
도와 주시면 감사하겠습니다.
꾸벅~!
DB : MS SQL 2014
테이블 : A
컬럼 : JUMSU
ms sql 에서 반올림(round)하면 5 이상이면 올리고 5 미만이면 버리잖아요.
그런데 제가 하고 싶은건 2.5 기준과 5 그리고 7.5 기준으로 결과를 얻고 싶습니다.
끝자리가 0~2 이면 버려서 0이 되고
끝자리가 3~5 이면 올려서 5가 되고
끝자리가 6~7 이면 버려서 5가 되고
끝자리가 8~10 이면 올려서 10 이 되는 결과를 얻고 싶은거죠.
★ 그런데
기준값은 백단위인 3자리수와 ( 예, 736 927 136 등)
기준값은 천단위인 4자리수가 있습니다. ( 예, 3736 1927 5136 등)
★ 먼저 백단위 일 경우
|-----------------|----------------|----------------|----------------|
0 2.5 5 7.5 10
끝자리가 0~2 이면 0이 되고
끝자리가 3~5 이면 5가 되고
끝자리가 6~7 이면 5가 되고
끝자리가 8~10 이면 10 이 되는 결과를 얻고 싶습니다.
기준값-> 결과값
700 -> 700
722 -> 720
825 -> 825
827 -> 825
384 -> 385
428 -> 430
999 -> 1000
724 -> 725
★ 두번째로 천단위 일 경우
|-----------------|----------------|----------------|----------------|
0 25 50 75 100
끝에 두 자리가 0~24 이면 0이 되고
끝에 두 자리가 25~50 이면 50 이 되고
끝에 두 자리가 51~74 이면 50 이 되고
끝에 두 자리가 75~100 이면 100 이 되는 결과를 얻고 싶습니다.
기준값-> 결과값
4500 -> 4500
5826 -> 5850
8874 -> 8850
7017 -> 7000
3734 -> 3750
9978 -> 10000
위의 결과를 얻을 수 있는 SQL 쿼리문 어떻게 해야 할지요?
WITH t AS ( SELECT 700 jumsu UNION ALL SELECT 722 UNION ALL SELECT 825 UNION ALL SELECT 827 UNION ALL SELECT 384 UNION ALL SELECT 428 UNION ALL SELECT 999 UNION ALL SELECT 724 UNION ALL SELECT 4500 UNION ALL SELECT 5826 UNION ALL SELECT 8874 UNION ALL SELECT 7017 UNION ALL SELECT 3734 UNION ALL SELECT 9978 UNION ALL SELECT 45001 UNION ALL SELECT 58262 UNION ALL SELECT 88743 UNION ALL SELECT 70174 UNION ALL SELECT 37345 UNION ALL SELECT 99786 ) SELECT jumsu , CAST(ROUND(jumsu / x, 0) * x AS INT) x FROM (SELECT jumsu , (5. * POWER(10, LEN(jumsu) - 3)) x FROM t ) a ;