0
我第一次使用CTE,并遇到一些困难。我在网上查找,并试图拼凑出一些例子。CTE不通过递归
我想插入行之间的每两行返回帐户的所有天。行1有日期(A),行2有日期(B)。我想在A和B之间每天插入一行,其中这些行都与第1行具有相同的值。
如果我只对我的测试数据运行我的锚点定义,我得到341行。运行CTE后,我得到682.所以它只运行一次。
任何建议,你可以提供将是伟大的。谢谢。
我有以下表模式:
field1 (varchar(10)) field2 (smalldatetime) field3 (numeric(18,0)) field4 (numeric(18,6)) field5 (numeric(18,6)) field6 (numeric(18,3))
输入表的一个例子是:
ABC 1-1-1990 0 0.1 0.1 0.125
ABC 1-5-1990 1 0.2 0.2 1.0
ABC 1-9-1990 0 0.3 0.3 0.750
ABC 1-13-1990 1 0.4 0.4 1.500
我想将其转换成这样:
ABC 1-1-1990 0 0.1 0.1 0.125
ABC 1-2-1990 0 0.1 0.1 0.125
ABC 1-3-1990 0 0.1 0.1 0.125
ABC 1-4-1990 0 0.1 0.1 0.125
ABC 1-5-1990 1 0.2 0.2 1.0
ABC 1-6-1990 1 0.2 0.2 1.0
ABC 1-7-1990 1 0.2 0.2 1.0
ABC 1-8-1990 1 0.2 0.2 1.0
ABC 1-9-1990 0 0.3 0.3 0.750
ABC 1-10-1990 0 0.3 0.3 0.750
ABC 1-11-1990 0 0.3 0.3 0.750
ABC 1-12-1990 0 0.3 0.3 0.750
ABC 1-13-1990 1 0.4 0.4 1.500
这里我现在的CTE:
WITH NewData (field1,field2,field3,field4,field5,field6) AS
(
SELECT m.field1,m.field2,m.field3,m.field4,m.field5,m.field6
FROM MyTable as m
WHERE m.field1 is not null
GROUP BY m.field1,m.field2,m.field3,m.field4,m.field5,m.field6
UNION ALL
SELECT m.field1, DATEADD(d, 1, m.field2), m.field3, m.field4, m.field5, m.field6
FROM MyTable as m
)
SELECT field1,field2,field3, field4, field5,field6
FROM NewData
order by field1, field2
OPTION(MAXRECURSION 0)
电流输出(缺少日期1-3-1990,1-4-1990,1-7-1990,1-8-1990,1-11-1990,1-12-1990):
ABC 1-1-1990 0 0.1 0.1 0.125
ABC 1-2-1990 0 0.1 0.1 0.125
ABC 1-5-1990 1 0.2 0.2 1.0
ABC 1-6-1990 1 0.2 0.2 1.0
ABC 1-9-1990 0 0.3 0.3 0.750
ABC 1-10-1990 0 0.3 0.3 0.750
ABC 1-13-1990 1 0.4 0.4 1.500
感谢您的回复。我正在尝试退出smalldatetime字段(field2)。我想获取第1行的日期,第2行的日期,并递归添加一天到第1行插入一行,直到我到达第2行的日期。一旦到达第2行的日期,CTE应该移动到第2行和第3行从最初的数据集...等等 – Ken
这并不完全正常,就递归而言,必须击中实际行,而不是在中间创建行。如果你有预建的日历表(如数字表),那么你可能会破解它的工作。 – Andrew