티스토리 뷰
반응형
업체 요청사항으로 현재 가지고 있는 Roll 수를 하나의 행으로 표현해달라는 요청을 받았다.
위 부분을 검색하며 짠 부분을 포스팅 한다.
Declare @T1 Table
(
idx int identity (1,1) not null,
item_name varchar(20),
item_num int
)
-- T1 테이블 생성
-- T1 테이블이 기본이 되는 테이블이다.
Declare @T2 Table
(
idx int identity (1,1) not null,
item_name varchar(20),
item_num int
)
-- T1에 있는 수량만큼 ROW로 추가할 테이블이 T2
Insert into @T1 values ('book', 2)
Insert into @T1 values ('note', 3)
Insert into @T1 values ('pen', 1)
--T1 테이블에 임시 값 저장
위와 같이 T1 테이블에 데이터를 입력한다면 아래와 같이 출력된다.
예시로 책이 2권, 노트가 3권 펜이 1개 있다.
이 테이블의 item_num에 따라 행을 추가해보자.
DECLARE @i int, @maxno int
-- while 을 돌리기 위한 함수들
Declare @item_name varchar(20)
Declare @item_num int
Declare @j int
-- item_num(수량)만큼 while을 돌면서
-- insert 하기 위하여 j 선언
Set @i=1
Select @maxno=MAX(idx) From @T1
-- max(idx) 총 행수를 가져온다.
-- 해당 부분은 총 행수에 따라 while 을 돌기 위하여 max 값을 가져옴
While(@i<=@maxno)
-- maxno = 3 이므로 1,2,3 총 3번의 while 시작
Begin
Select @item_name=item_name, @item_num=item_num From @T1 Where idx=@i
-- T1 테이블에 있는 item_name, item_num 을 변수에 적용
Set @j=0
While(@j<@item_num)
-- item_num가 2라면 0,1 총 2번의 while 시작
Begin
Insert Into @T2 (item_name,item_num) Values (@item_name, '1')
-- T2 테이블에 2번의 while문을 돌면서 item_name 입력하며 item_num 은 1로 선언
Set @j = @j + 1
End
Set @i = @i + 1
End
이런 식으로 데이터를 while문을 통하여 insert 하면
아래와 같은 결과물을 얻을 수 있다.
T1 테이블의 item_num에 따라 각 행만큼 insert 된 데이터를 확인할 수 있다.
반응형
'IT & programming > MSSQL' 카테고리의 다른 글
[MS-SQL] 프로시저 내부의 문자열 검색 (syscomments & sql_modules) (0) | 2021.01.07 |
---|---|
[MS-SQL] CHARINDEX 이용하여 문자열 자르기 (0) | 2021.01.05 |
[MS-SQL] PIVOT 테이블 사용 방법 (0) | 2016.02.01 |
[MS-SQL] 0으로 나누기 오류가 발생했습니다. (0) | 2016.01.25 |
[MS-SQL] row_number 그리고 Partition (0) | 2015.12.30 |
댓글