8

客户在他们的数据中有快捷方式,他们在字段中有大量记录。当我解析它们时,我需要制造记录,每个数量一个,将“标识符”增加 7 天(因为数字代表一个日期。

例如:一个销售四个星期的单一产品,我需要四个记录,每周一种产品。

 [Event Number]   [Classification]   [Weeks Running]    [Some Data]  
 2009 11 29 00           1                   1         runs one week 
 2009 12 06 00           2                   1         runs one week 
 2009 12 13 00           1                   4        runs four weeks
 2009 12 20 00           2                   4        runs four weeks

不知何故,我需要使用视图(sql select)将这些数据转换为以下内容(全部在同一个表中,包含空格以查看部分:

 [Event Number + Classification]      [Some Data]    
          2009 11 29 01            runs for one week 一周因此创造了一项记录。
          2009 12 06 02            runs for one week 

          2009 12 13 01           runs for four weeks重复 4 次将日期递增 7
          2009 12 20 01           runs for four weeks
          2009 12 27 01           runs for four weeks
          2009 01 03 01           runs for four weeks

          2009 12 20 02           runs for four weeks重复 4 次将日期递增 7
          2009 12 27 02           runs for four weeks
          2009 01 03 02           runs for four weeks
          2009 01 10 02           runs for four weeks

我的想法是有某种枢轴交叉应用sql代码?

4

2 回答 2

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;
于 2009-11-07T02:39:03.390 回答
2

我有一个便宜的答案给你。您使用“预渲染”Weeks表来创建基于查询的循环。你需要投入足够的时间来覆盖你预期的场景范围。

[Week]
1
2
3
4

[Weeks Running]然后使用不等式将查询加入到该表中OriginalTable.WeeksRunning <= Weeks.Week。你最终每周只有一排。

Weeks.Week * 7您可以通过在事件编号中嵌入的日期加上天数来推断日期。

于 2009-11-07T00:33:41.627 回答