基于楼宇与办公室列重排表并填充sequence列的SQL需求
表数据序号填充需求
现有一张包含4列的数据表,列信息如下:
Name:varchar2类型Building:仅允许取值'A'/'B'/'C'Office:数值类型,取值范围为1-100的整数sequence:初始为空
表的总数据量不超过100条,且各楼宇对应的记录数大致相当。需按以下规则为sequence列填充从1开始的数值:
- 相同
Building和Office的记录归为一个block,每个block内的序号必须连续。 - block的排列需尽可能遵循
A-B-C-A-B-C……的Building循环顺序。
示例
原表数据
| Name | Building | Office | sequence |
|---|---|---|---|
| 安娜 | C | 1 | |
| 鲍勃 | A | 2 | |
| 查尔斯 | A | 1 | |
| 戴安娜 | B | 5 | |
| 伊芙 | C | 7 | |
| 弗兰克 | B | 5 | |
| 格温 | A | 1 | |
| 赫伯特 | B | 4 | |
| 艾琳 | C | 5 |
预期结果(按sequence排序)
| Name | Building | Office | sequence |
|---|---|---|---|
| 查尔斯 | A | 1 | 1 |
| 格温 | A | 1 | 2 |
| 赫伯特 | B | 4 | 3 |
| 安娜 | C | 1 | 4 |
| 鲍勃 | A | 2 | 5 |
| 戴安娜 | B | 5 | 6 |
| 弗兰克 | B | 5 | 7 |
| 伊芙 | C | 7 | 8 |
| 艾琳 | C | 5 | 9 |
说明:查尔斯和格温的
Building(A)与Office(1)相同,属于同一个block,因此分配连续序号;下一个记录则是Building为B的block,符合A-B-C的循环顺序。
另一种有效结果
若仅对block排序后统一分配序号,以下结果也符合要求:
| Name | Building | Office | sequence |
|---|---|---|---|
| 查尔斯 | A | 1 | 1 |
| 格温 | A | 1 | 1 |
| 赫伯特 | B | 4 | 2 |
| 安娜 | C | 1 | 3 |
| 鲍勃 | A | 2 | 4 |
| 戴安娜 | B | 5 | 5 |
| 弗兰克 | B | 5 | 5 |
| 伊芙 | C | 7 | 6 |
| 艾琳 | C | 5 | 7 |
内容的提问来源于stack exchange,提问作者Alejandro Menaya
相关产品推荐
相关产品推荐

