遍历行并在临时表中插入数据-SQL Server 2008
我有一些数据如下遍历行并在临时表中插入数据-SQL Server 2008,sql,sql-server,sql-server-2008,loops,iteration,Sql,Sql Server,Sql Server 2008,Loops,Iteration,我有一些数据如下 Duration Start Date ========================== 2 11/11/2014 1 11/6/2014 3 11/22/2014 Date =========== 11/11/2014 11/12/2014 11/6/2014 11/22/2014 11/23/2014 11/24/2014 我想迭代以上三行并生成如下输出 Duratio
Duration Start Date
==========================
2 11/11/2014
1 11/6/2014
3 11/22/2014
Date
===========
11/11/2014
11/12/2014
11/6/2014
11/22/2014
11/23/2014
11/24/2014
我想迭代以上三行并生成如下输出
Duration Start Date
==========================
2 11/11/2014
1 11/6/2014
3 11/22/2014
Date
===========
11/11/2014
11/12/2014
11/6/2014
11/22/2014
11/23/2014
11/24/2014
以开始日期按持续时间递增日期,并为每个日期创建单独的行不要迭代,而是使用基于集合的方法,如
WITH Nums AS(
SELECT DISTINCT Value = number
FROM master..[spt_values]
)
SELECT Date = DATEADD(d, n.Value - 1, t.[Start Date])
FROM Nums n CROSS JOIN TableName t
WHERE n.Value BETWEEN 1 AND t.Duration
请注意,此方法仅在2164年之前有效。另一种方法是使用数字表。阅读:
如果要将其插入到另一个表中,可以通过以下方式使用:
WITH Nums AS(
SELECT DISTINCT Value = number
FROM master..[spt_values]
)
INSERT INTO #TempTable ([Date])
SELECT Date = DATEADD(d, n.Value - 1, t.[Start Date])
FROM Nums n CROSS JOIN TableName t
WHERE n.Value BETWEEN 1 AND t.Duration
不要迭代,而是使用基于集合的方法,如
WITH Nums AS(
SELECT DISTINCT Value = number
FROM master..[spt_values]
)
SELECT Date = DATEADD(d, n.Value - 1, t.[Start Date])
FROM Nums n CROSS JOIN TableName t
WHERE n.Value BETWEEN 1 AND t.Duration
请注意,此方法仅在2164年之前有效。另一种方法是使用数字表。阅读:
如果要将其插入到另一个表中,可以通过以下方式使用:
WITH Nums AS(
SELECT DISTINCT Value = number
FROM master..[spt_values]
)
INSERT INTO #TempTable ([Date])
SELECT Date = DATEADD(d, n.Value - 1, t.[Start Date])
FROM Nums n CROSS JOIN TableName t
WHERE n.Value BETWEEN 1 AND t.Duration
有很多方法可以做到这一点,你试过哪些呢?老实说,我试过使用循环和CTE,但没有用;我是SQL新手,所以有很多方法可以做到这一点,你试过哪些方法?老实说,我试过使用循环和CTE,但没有用;我是SQL soThanks的新手Tim,让我试试这个。谢谢Tim,让我试试这个。