2014-03-19 50 views
2

我曾經在那裏每年需要12個條目,每個月一,即一個YearMonths表,如何從年表創建YearMonths表?

Year Month 
2013 1 
2013 2 
... 
2013 12 

對於每個新的一年裏,我不得不產生12分新的記錄。我知道我可以用循環做到這一點,但我試圖找出一種沒有辦法的方法。我想通過從年表中選擇所有年份並從那裏進行填充,但我不確定如何不使用循環。

+0

的SQL Server版本? – christiandev

+0

2005 - 添加到標籤。 – Yatrix

回答

2

假設你的年數表是這樣的:

CREATE TABLE YEARS(Year INT) 

和你YearMonths表是這樣的:

​​

你可以做這樣的事情:

WITH CTE AS (
     SELECT 1 AS Mnth 
     UNION ALL 
     SELECT Mnth + 1 FROM CTE 
     WHERE Mnth < 12) 
INSERT INTO YearMonths (Year, Month) 
SELECT Year, Mnth FROM YEARS CROSS APPLY CTE 
ORDER BY Year, Mnth 

此方法使用recursive Common Table Expression(自SQL Server 2005起可用)構建in teger 1-12然後cross applies它以Years Table建立最終名單。

演示:http://sqlfiddle.com/#!3/bbb0f/1

+0

很酷,謝謝。 – Yatrix