2014-03-19 26 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