我有3张桌子,人员,会员和俱乐部。我想知道哪个5年期间注册次数最多。从我听到的SQL Server 2012中没有FOR循环所以我该怎么做?谢谢。像这样:
SELECT count(*)
FROM Membership
WHERE Membership.date>=x-01-01
AND Membership.date<x+10-12-31
答案 0 :(得分:0)
您可以在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
语句定义了一个递归CTE,其中包含2000年至2014年间每年的5年期。根据需要进行调整。