2014-10-11 67 views
0

我有3個表格,人員,會員和俱樂部。我想知道哪些5年期間註冊人數最多。從我聽說SQL Server 2012中沒有FOR循環,所以我該怎麼做?謝謝。事情是這樣的:在一系列值上運行相同的查詢

SELECT count(*) 
FROM Membership 
WHERE Membership.date>=x-01-01 
AND Membership.date<x+10-12-31 

回答

0

您可以在SQL Server與WHILECURSOR模擬FOR循環。但是與Oracle的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語句定義含5年期每年爲2000年至2014年之間的遞歸CTE其調整需要。

相關問題