당신은 SQL Server의 WHILE
및 CURSOR
와 FOR 루프 시뮬레이션 할 수 있습니다. 하지만 오라클의 FOR
에 비해 오버 헤드가 큽니다. 그러나 거의 언제든지 SQL Server에서 루프를 사용한다고 생각하면 틀린 일이 있습니다.
귀하의 문제는 재귀 CTE에 의해 해결 될 수 있으며, 가입 :
;WITH Periods AS (
SELECT CAST('2000-01-01' AS Date) AS StartDate,
CAST('2004-12-31' AS Date) AS EndDate
UNION ALL
SELECT DATEADD(year,1,StartDate),
DATEADD(year,1,EndDate)
FROM Periods
WHERE StartDate < '2014-01-01'
)
SELECT p.StartDate,
p.EndDate,
COUNT(m.*)
FROM Memberships m
INNER JOIN Periods p ON m.Date BETWEEN p.StartDate AND p.EndDate
GROUP BY p.StartDate, p.EndDate
WITH
문은 필요에 따라 조정 2000 년과 2014 년 사이에 매년 5 년의 기간을 포함하는 재귀 CTE를 정의합니다.