【问题】
是这样的,有一个物品清单表,物品清单有一个数量的字段,一般都是>1的数量值,现在需要分解在一个表里,把>1的数量值,按多少就生成多少条相同的记录,有什么高效的办法吗
物品表(字段如下):
物品编号,物品名称,数量
C1-23 测试仪 3
C3-11 显微镜 2
如何变成:
物品编号,物品名称,数量
C1-23 测试仪 1
C1-23 测试仪 1
C1-23 测试仪 1
C3-11 显微镜 1
C3-11 显微镜 1
【回答】
不同数据库间实现方式不同,在MSSQL中可以使用该表与master..spt_values关联实现:
select t.物品编号,物品名称,1 数量 from 物品表 t
join master..spt_values s on s.type = 'P' and 数量 > s.number
通用的方案可以用SPL来做,循环函数写起来简单易懂:
| A | |
| 1 | $select物品编号,物品名称,数量 from 物品表 |
| 2 | =A1.conj(数量*[~]).run(数量=1) |
A1:sql取数
A2:通过“数量*[~]”将每条记录按照“数量”倍复制一个新序列,再通过conj将这些序列成员合并,最后通过run将合并后的“数量”列值重新赋值为1
批量拆分物品清单
针对物品清单表中数量大于1的记录,介绍了一种高效的方法来将其拆分成多条记录,每条记录的数量均为1。在不同的数据库环境中,实现方式有所不同,例如在MSSQL中可以通过连接master..spt_values表来实现;而使用SPL则可以通过循环函数简洁地完成任务。
686

被折叠的 条评论
为什么被折叠?



