아래와 같은 자료가 있다고 가정하고
번호 상품 길이 작업자
----------------------
13 A 10
21 AA 8
93 DD 12
04 bbb 10
61 BB 35
71 CC 24
18 CCC 7
19 KK 4
30 Y 10
순서는 order에 따라 매번 틀려지구요.
저장 방법은 첫 레코드부터 마지막 레코드까지
누적 길이가 대략 50정도씩 끊어 작업자를 지정합니다.
아래와 같이 일괄 update 할 수 있는 쿼리가 가능 할까요?
번호 상품 길이 작업자
----------------------
13 A 10 홍길동
21 AA 8 홍길동
93 DD 12 홍길동
04 bbb 10 홍길동
61 BB 12 홍길동
71 CC 10 김개똥
18 CCC 7 김개똥
19 KK 24 김개똥
30 Y 10 김개똥
Comment 1
-
건우아빠
2015.05.08 19:07
declare @row_div numeric(5,1) , @cust_cnt int
set @row_div = 3.0
set @cust_cnt = 6 ;
with cust as (
select 1 cust_id , '홍길동' 이름 union all
select 2 cust_id , '김개똥' 이름 union all
select 3 cust_id , '김말숙' 이름 union all
select 4 cust_id , '개똥이' 이름 union all
select 5 cust_id , '소똥이' 이름 union all
select 6 cust_id , '말똥이' 이름
) ,
res as
(
select '13' 번호 ,'A' 상품 ,10 길이 , '' 작업자 union all
select '21' ,'AA' ,8 , '' union all
select '93' ,'DD' ,12 , '' union all
select '04' ,'bbb' ,10 , '' union all
select '61' ,'BB' ,35 , '' union all
select '71' ,'CC' ,24 , '' union all
select '18' ,'CCC' ,7 , '' union all
select '19' ,'KK' ,4 , '' union all
select '30' ,'Y' ,10 , '' ) ,
result as (
select *
, CEILING ( ROW_NUMBER() over ( order by 번호) / @row_div ) idx
, case when (CEILING ( ROW_NUMBER() over ( order by 번호) / @row_div ) % @cust_cnt) = 0
then @cust_cnt
else (CEILING ( ROW_NUMBER() over ( order by 번호) / @row_div ) % @cust_cnt)
end cust_id
from res )
select a.번호, a.상품 ,a.길이 , b.이름
from result a join cust b on a.cust_id = b.cust_id