我曾经在那里每年需要12个条目,每个月一,即一个YearMonths表,如何从年表创建YearMonths表?
Year Month
2013 1
2013 2
...
2013 12
对于每个新的一年里,我不得不产生12分新的记录。我知道我可以用循环做到这一点,但我试图找出一种没有办法的方法。我想通过从年表中选择所有年份并从那里进行填充,但我不确定如何不使用循环。
我曾经在那里每年需要12个条目,每个月一,即一个YearMonths表,如何从年表创建YearMonths表?
Year Month
2013 1
2013 2
...
2013 12
对于每个新的一年里,我不得不产生12分新的记录。我知道我可以用循环做到这一点,但我试图找出一种没有办法的方法。我想通过从年表中选择所有年份并从那里进行填充,但我不确定如何不使用循环。
假设你的年数表是这样的:
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建立最终名单。
很酷,谢谢。 – Yatrix
的SQL Server版本? – christiandev
2005 - 添加到标签。 – Yatrix