지금 테이블에 마지막 데이터들 집합이
Week Cell Shift Name
W1425 1 Day 이름1
W1425 2 Day 이름2
W1425 2 Night 이름3
W1425 5 Day 이름4
W1425 5 Night 이름5
이렇게 있으면
매주 월요일 즉
W1425주 월요일에는 sql 서버에서 자동으로 W1426 shift를 자동으로 생성하고 싶은데요
전주 1 cell Day 근무자가 2 cell Day 로
전주 2 cell Day -> 2 cell Night
전주 2 cell Night -> 5 cell Day
전주 5cell Day -> 5 cell Night
전주 5 cell Night -> 1 cell Day
그리고 다음 주도 마찬가지...
이런식으로 한칸씩 근무자 시프트가 옮기는 식입니다
이걸 어떻게 만들어야 하는지 잘 모르겠습니다
도와주시면 감사하겠습니다.
Comment 1
-
초짜해커
2014.06.26 11:05
DECLARE @WORK TABLE (Week VARCHAR(5), Cell INT, Shift VARCHAR(5), Name VARCHAR(10))INSERT @WORK SELECT 'W' + CONVERT(VARCHAR(2), GETDATE(), 2) + CONVERT(VARCHAR(2), DATEPART(WEEK, GETDATE()) - 1), 1, 'Day', '이름1'INSERT @WORK SELECT 'W' + CONVERT(VARCHAR(2), GETDATE(), 2) + CONVERT(VARCHAR(2), DATEPART(WEEK, GETDATE()) - 1), 2, 'Day', '이름2'INSERT @WORK SELECT 'W' + CONVERT(VARCHAR(2), GETDATE(), 2) + CONVERT(VARCHAR(2), DATEPART(WEEK, GETDATE()) - 1), 2, 'Night', '이름3'INSERT @WORK SELECT 'W' + CONVERT(VARCHAR(2), GETDATE(), 2) + CONVERT(VARCHAR(2), DATEPART(WEEK, GETDATE()) - 1), 5, 'Day', '이름4'INSERT @WORK SELECT 'W' + CONVERT(VARCHAR(2), GETDATE(), 2) + CONVERT(VARCHAR(2), DATEPART(WEEK, GETDATE()) - 1), 5, 'Night', '이름5'SELECT * FROM @WORKDECLARE @MAXCOUNT INT = (SELECT COUNT(1) FROM @WORK)SELECT Week = 'W' + CONVERT(VARCHAR(2), GETDATE(), 2) + CONVERT(VARCHAR(2), DATEPART(WEEK, GETDATE())), A.Cell, A.Shift, B.NameFROM (SELECT 순번 = ROW_NUMBER() OVER (ORDER BY Cell, Shift), Week, Cell, Shift, NameFROM @WORKWHERE WEEK = 'W' + CONVERT(VARCHAR(2), GETDATE(), 2) + CONVERT(VARCHAR(2), DATEPART(WEEK, GETDATE()) - 1)) A LEFT OUTER JOIN(SELECT 순번 = ROW_NUMBER() OVER (ORDER BY Cell, Shift), Week, Cell, Shift, NameFROM @WORKWHERE WEEK = 'W' + CONVERT(VARCHAR(2), GETDATE(), 2) + CONVERT(VARCHAR(2), DATEPART(WEEK, GETDATE()) - 1)) B ON CASE WHEN A.순번 = 1 THEN @MAXCOUNT + 1 ELSE A.순번 END = B.순번 + 1더 간단한 버전은 다음분이... -_-;;