物料清单BOM展开

wils
wils

创作者俱乐部成员

这是个常见的问题:下面这个表里,每一行代表生产工件所需子件的数量,要展开这个表,列出生产工件A,所需的最末级子件及数量。

工件

子件

数量

A

B

1

A

C

2

B

C

3

B

D

4

D

C

5

D

E

6

如果安装了xloil,则可以在wps里写sql,而sql里的递归写法似乎非常适合解决这种问题

👋

=xloSql("with recursive r as (

select * from Table1

union all

select r.工件, Table1.子件, r.数量*Table1.数量 from r join Table1 on r.子件 = Table1.工件

)

select 工件, 子件, sum(数量) from r where 工件 = 'A' and 子件 not in (select 工件 from Table1) group by 工件, 子件",,A1:C7)

其中Table1是指数据源表

在递归表r里,先加入Table1里的所有行

然后从r里每次取出一行,与Table1连接,结果再插入递归表r

直到r里的所有行都取出,且无法再连接Table1

最后从r里找出所有工件A,最末级子件,再把数量求和

这个思路十分清晰

而在写出sql以后,再写js宏,思路就比较顺了,但还是比sql复杂难懂一点。。。

而且,如果数据源表是csv,Shell里可以几乎不修改执行sql查询csv文件

所以,既然WPS都有新的正则公式了,且kingsoft文件夹里也有sqlite3.dll,不如加上SQL查询公式,可以极大的扩展表的连接等查询操作,非常方便

期待官方提供SQL公式😁

广东省
浏览 387
收藏
4
分享
4 +1
4
+1
全部评论 4
 
深海小鱼
学习
· 广西
1
回复
 
Boyuan
谁写个Lambda的递归参考一下呗
· 河南省
1
回复
 
HC.旋
跟着老师学
· 江苏省
2
回复
 
寻残梦
666
· 广东省
1
回复