숫자 테이블이없는 경우 시스템 테이블을 사용하여 즉시 순차 숫자 목록을 생성 할 수 있습니다.
예를 들어
SELECT Number = ROW_NUMBER() OVER(ORDER BY object_id)
FROM sys.all_objects;
더 많은 숫자를 위해이 연장이 필요하면 테이블을 교차 할 수 있습니다.
SELECT Number = ROW_NUMBER() OVER(ORDER BY a.object_id)
FROM sys.all_objects a
CROSS JOIN sys.all_objects b;
그런 다음 시작 날짜 부터이 주를 추가/빼기 만하면됩니다.
DECLARE @Monday DATE = DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0);
WITH Numbers AS
( SELECT Number = ROW_NUMBER() OVER(ORDER BY object_id)
FROM sys.all_objects
)
SELECT WeekNumber = DATEPART(ISO_WEEK, w.DateMonday),
w.DateMonday
FROM ( SELECT DateMonday = DATEADD(WEEK, - n.Number, @Monday)
FROM Numbers n
) w;
이것은 단계별 명확성을 위해이 작업을 수행하는 장점입니다.
SELECT WeekNumber = DATEPART(ISO_WEEK, w.DateMonday),
w.DateMonday
FROM ( SELECT DateMonday = DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()) - ROW_NUMBER() OVER(ORDER BY object_id), 0)
FROM sys.all_objects
) w;
아론 버트 랜드 순차적 인 숫자 목록을 생성하는 몇 가지 깊이 비교 방법을 수행했습니다.
물론 가장 쉬운 방법은 캘린더 테이블