Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从年表创建年-月表?_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql 如何从年表创建年-月表?

Sql 如何从年表创建年-月表?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一个YearMonths表,每年需要12个条目,每个月一个,即 Year Month 2013 1 2013 2 ... 2013 12 对于每一个新的一年,我必须产生12个新的记录。我知道我可以通过一个循环来完成这项工作,但我正试图找到一种不用循环就能完成的方法。我想通过从一个年份表中选择所有年份来填充这个表,从那里开始,我只是不知道如果不使用循环,如何填充 假设您的年份表是这样的: CREATE TABLE YEARS(Year INT) CREATE TABLE

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

Year  Month
2013    1
2013    2
...
2013   12

对于每一个新的一年,我必须产生12个新的记录。我知道我可以通过一个循环来完成这项工作,但我正试图找到一种不用循环就能完成的方法。我想通过从一个年份表中选择所有年份来填充这个表,从那里开始,我只是不知道如果不使用循环,如何填充

假设您的年份表是这样的:

CREATE TABLE YEARS(Year INT) 
CREATE TABLE YearMonths(Year INT, Month Int)
你的年月表是这样的:

CREATE TABLE YEARS(Year INT) 
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
这种方法使用一个从SQLServer2005开始可用的变量来构建整数1-12的列表,然后将其转换到年份表来构建最终列表


演示:

哪个版本的sql server?2005-已添加到标记中。