如何从Years表创建YearMonths表?

时间:2014-03-19 18:45:58

标签: sql sql-server sql-server-2005

我有一个YearMonths表,其中每年需要12个条目,每个月一个,即

Year  Month
2013    1
2013    2
...
2013   12

对于每个新的一年,我必须生成12个新记录。我知道我可以通过一个循环来做到这一点,但我试图想办法在没有循环的情况下做到这一点。我想填写表格,从年份表中选择所有年份并从那里开始,我只是不确定如何不使用循环。

1 个答案:

答案 0 :(得分:2)

假设你的YEARS表是这样的:

CREATE TABLE YEARS(Year INT) 

你的YearMonths表是这样的:

CREATE TABLE YearMonths(Year INT, Month Int)

您可以这样做:

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以来可用)构建整数1-12的列表,然后cross applies将其创建为Years表以构建最终列表。

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