我有一个看起来像这样的表:
+====================================================+
| aid | uid | eid | name | dob | paid |
+====================================================+
| 1 | 100 | 10 | Mick | 1980-03-29 | 40 |
| 2 | 101 | 11 | Jack | 1969-11-21 | 40 |
| 3 | 205 | 11 | Lynn | 1990-07-10 | 80 |
| 4 | 217 | 10 | Dana | 1987-02-15 | 40 |
+----------------------------------------------------+
其中aid = Temp 表标识列,uid = User 表 FK,eid = Employer 表 FK
所以这个数据需要进入另一个表,但它看起来像这样:
+====================================================+
| id | uid | eid | week | postdate | paid |
+====================================================+
| 1 | 100 | 10 | 1 | 2015-09-03 | 10 |
| 2 | 100 | 10 | 2 | 2015-09-03 | 10 |
| 3 | 100 | 10 | 3 | 2015-09-03 | 10 |
| 4 | 100 | 10 | 4 | 2015-09-03 | 10 |
| 1 | 101 | 11 | 1 | 2015-09-03 | 10 |
| 2 | 101 | 11 | 2 | 2015-09-03 | 10 |
| 3 | 101 | 11 | 3 | 2015-09-03 | 10 |
| 4 | 101 | 11 | 4 | 2015-09-03 | 10 |
| 1 | 205 | 11 | 1 | 2015-09-03 | 20 |
| 2 | 205 | 11 | 2 | 2015-09-03 | 20 |
| 3 | 205 | 11 | 3 | 2015-09-03 | 20 |
| 4 | 205 | 11 | 4 | 2015-09-03 | 20 |
| 1 | 217 | 10 | 1 | 2015-09-03 | 10 |
| 2 | 217 | 10 | 2 | 2015-09-03 | 10 |
| 3 | 217 | 10 | 3 | 2015-09-03 | 10 |
| 4 | 217 | 10 | 4 | 2015-09-03 | 10 |
+----------------------------------------------------+
所以发生的事情是,我选择了一年中的一个月,然后我得到了那个月的周数(week
列),并且对于我初始表中的每条记录,我将一个添加到我的第二个表中。Mick、Jack 和 Dana 支付了 40(拆分 4 [每月的几周]),Lynn 支付了 80,从而使选定月份的每周支付 20。
所以基本上我想问的是我正在寻找这种或这种使用 a 的方法CURSOR
,或者是否有更具体的方法从 aSELECT
为表中的每条记录插入记录(不超过 600(x4)条记录时间)。
请注意,示例仅考虑将记录从一个表“移动”或复制到另一个表,因此这里的 100 条记录变成那里的 100 条记录。我可以实施哪些选项来使用 SQL 在我的临时表中每条记录插入 4 条记录(前端代码中的循环除外)?
下面是一个示例,它使用递归 CTE 创建每周值和一个简单的 INSERT...SELECT 来填充您的表。除了 postdate 是当前日期之外,为了测试起见,我假设了一些身份 ID。您不需要光标来完成这项工作。享受!