MSSQL 로우합치지 및 십단위 올림
프로젝트에서 개발을 하다보면 Row로 구성된 데이터를 한줄의 문장으로 보여달라는 요구사항이 종종 나옵니다. 이럴때는 어떻게 해야 할까요? 또한, 통계 데이터를 만지다보면 십단위로 올림을 줘야 하는 경우가 있는데 이것은 어떻게 해야 할까요?
DECLARE @TABLE TABLE
(
ID INT
, Title VARCHAR(10)
)
-- 테이블변수에 데이터 생성
INSERT INTO @TABLE (ID, Title) VALUES (11, '가1')
INSERT INTO @TABLE (ID, Title) VALUES (22, '나2')
INSERT INTO @TABLE (ID, Title) VALUES (23, '다3')
INSERT INTO @TABLE (ID, Title) VALUES (33, '라4')
INSERT INTO @TABLE (ID, Title) VALUES (33, '마5')
INSERT INTO @TABLE (ID, Title) VALUES (33, '바6')
INSERT INTO @TABLE (ID, Title) VALUES (44, '사7')
INSERT INTO @TABLE (ID, Title) VALUES (44, '아8')
INSERT INTO @TABLE (ID, Title) VALUES (44, '자9')
INSERT INTO @TABLE (ID, Title) VALUES (44, '차10')
-- 최종 로우 합치기 쿼리
SELECT
DISTINCT ID
,
STUFF((
SELECT
',' + Title
FROM @TABLE B
WHERE B.ID = A.ID FOR XML PATH(''))
,1,1,'') AS NAME
FROM @TABLE A
어떠신가요? 간단히 해결 가능하지요...ㅎ
단, 속도가 느리니 주의해서 사용하세요.
이런 경우도 흔히 발생하는 경우는 아니지만 알아두면 분명 어딘가에 도움이 되실거에요.ㅎ
declare @num int = 286
declare @gubun int = 10
select (Ceiling(CAST(@num as float)/@gubun))*@gubun;
* 10단위 올림은 위와 같이 @gubun 값을 10으로 주고 100 단위 올림이 필요하다면 @gubun 값에 100을 주면 됩니다.
* 반올림 : ROUND를 사용하면 됩니다.
SELECT ROUND(50.549, 1) -- 50.500
SELECT ROUND(50.549, 2) -- 50.550
SELECT ROUND(50.549, 2, 0) -- 50.550
SELECT ROUND(50.549, 2, -1) -- 50.540
* 올림 : CEILING를 사용하면 됩니다.
SELECT CEILING(200.35) -- 201
SELECT CEILING(200.90) -- 201
* 버림 : FLOOR를 사용하시면 됩니다.
SELECT FLOOR(200.48) -- 200
SELECT FLOOR(200.8) -- 200
이상으로 MSSQL 로우합치지 및 십단위 올림에 관해서 알아보았습니다.
하여 오늘은 MSSQL 로우합치지 및 십단위 올림에 관해서 알아보겠습니다.
▶ Row 합치기
-- 테스트를 위한 테이블 변수를 생성DECLARE @TABLE TABLE
(
ID INT
, Title VARCHAR(10)
)
-- 테이블변수에 데이터 생성
INSERT INTO @TABLE (ID, Title) VALUES (11, '가1')
INSERT INTO @TABLE (ID, Title) VALUES (22, '나2')
INSERT INTO @TABLE (ID, Title) VALUES (23, '다3')
INSERT INTO @TABLE (ID, Title) VALUES (33, '라4')
INSERT INTO @TABLE (ID, Title) VALUES (33, '마5')
INSERT INTO @TABLE (ID, Title) VALUES (33, '바6')
INSERT INTO @TABLE (ID, Title) VALUES (44, '사7')
INSERT INTO @TABLE (ID, Title) VALUES (44, '아8')
INSERT INTO @TABLE (ID, Title) VALUES (44, '자9')
INSERT INTO @TABLE (ID, Title) VALUES (44, '차10')
-- 최종 로우 합치기 쿼리
SELECT
DISTINCT ID
,
STUFF((
SELECT
',' + Title
FROM @TABLE B
WHERE B.ID = A.ID FOR XML PATH(''))
,1,1,'') AS NAME
FROM @TABLE A
어떠신가요? 간단히 해결 가능하지요...ㅎ
단, 속도가 느리니 주의해서 사용하세요.
▶ 십단위 올림
다음으로 십단위 올림에 대해서 알아보겠습니다.이런 경우도 흔히 발생하는 경우는 아니지만 알아두면 분명 어딘가에 도움이 되실거에요.ㅎ
declare @num int = 286
declare @gubun int = 10
select (Ceiling(CAST(@num as float)/@gubun))*@gubun;
* 10단위 올림은 위와 같이 @gubun 값을 10으로 주고 100 단위 올림이 필요하다면 @gubun 값에 100을 주면 됩니다.
▶ 소수점 올림, 버림
소수점 올림, 버림에 대해서 알아보겠습니다.* 반올림 : ROUND를 사용하면 됩니다.
SELECT ROUND(50.549, 1) -- 50.500
SELECT ROUND(50.549, 2) -- 50.550
SELECT ROUND(50.549, 2, 0) -- 50.550
SELECT ROUND(50.549, 2, -1) -- 50.540
* 올림 : CEILING를 사용하면 됩니다.
SELECT CEILING(200.35) -- 201
SELECT CEILING(200.90) -- 201
* 버림 : FLOOR를 사용하시면 됩니다.
SELECT FLOOR(200.48) -- 200
SELECT FLOOR(200.8) -- 200
이상으로 MSSQL 로우합치지 및 십단위 올림에 관해서 알아보았습니다.
댓글
댓글 쓰기