티스토리 뷰

반응형

 

업체 요청사항으로 현재 가지고 있는 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 된 데이터를 확인할 수 있다.

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31