客户的数据中有快捷方式,他们在某个字段中有数量的记录。当我解析它们时,我需要制作记录,每个数量一个,将“标识符”增加7天(因为数字表示日期。
例如:一个单独的产品在售四周,我需要四个记录,每周一个产品。
[活动编号]
[分类]
[周运行]
[有些数据]
2009 11 29 00
1
1
运行一周
2009 12 06 00
2
1
运行一周
2009 12 13 00
1
4
运行四周
2009 12 20 00
2
4
运行四周
不知何故,我需要将这些数据转换为以下视图(sql select)(全部在同一个表中,包含空格以查看部分:
[事件编号+分类]
[有些数据]
2009 11 29 01
运行一周一周,因此一条记录
2009 12 06 02
运行一周
2009 12 13 01
运行四周重复4次递增日期7周
2009 12 20 01
运行四周
2009 12 27 01
运行四周
2009 01 03 01
运行四周
2009 12 20 02
运行四周重复4次递增日期7周
2009 12 27 02
运行四周
2009 01 03 02
运行四周
2009 01 10 02
运行四周
我的想法是有某种数据交叉应用sql代码?
答案 0 :(得分:3)
这在应用程序端而不是数据库端可能更简单,但是我会给它一个镜头......这需要一个支持CTE的数据库,我没有碰巧这是未经测试的。
WITH RECURSIVE expandedTable(eventNumber, classification, index, count, someData)
AS (
SELECT eventNumber, classification, 1, weeksRunning, someData
FROM originalTable
WHERE weeksRunning > 0
UNION ALL
SELECT eventNumber + 7, classification, index + 1, count, someData
FROM expandedTable
WHERE index < count
)
SELECT eventNumber, classification, someData
FROM expandedTable;
答案 1 :(得分:2)
我有一个便宜的答案给你。您使用“预渲染”Weeks
表来创建基于查询的循环。您需要花费足够的时间来覆盖预期的情景范围。
[Week]
1
2
3
4
然后,您使用不等式[Weeks Running]
将OriginalTable.WeeksRunning <= Weeks.Week
上的查询加入此表。你最终每周排成一排。
您可以通过将Weeks.Week * 7
天添加到事件编号中嵌入的日期来推断日期。