我有一个YearMonths表,其中每年需要12个条目,每个月一个,即
Year Month
2013 1
2013 2
...
2013 12
对于每个新的一年,我必须生成12个新记录。我知道我可以通过一个循环来做到这一点,但我试图想办法在没有循环的情况下做到这一点。我想填写表格,从年份表中选择所有年份并从那里开始,我只是不确定如何不使用循环。
答案 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表以构建最终列表。