问题描述
业务案例:使用单个查询(不考虑性能),按给定假设提供按工厂列出的零件编号列表。 (假设在下面的伪代码中列为注释。)
**Query 1** -- Parts sold in last 3 years
Plant,PartNo
UNION
**Query 2** -- Parts created in ERP in last year
Plant,PartNo
UNION
**Query 3** -- Parts in Inventory at run time
Plant,PartNo
UNION
**Query 4** -- Parts received in last 3 years
Plant,PartNo
UNION
**Query 5** -- Component parts of parts from queries 1 thru 4.
查询5的源表如下:
CREATE TABLE BOMTABLE (
PLANT AS PLANT
PARENT AS PARENT
CHILD AS CHILD
QTYPER AS QTYPER
...
);
我能够处理1到4的查询,并将它们联合在一起以输出PLANT,PARTNO,但是第五个查询使我陷于困境。我相信我需要利用DB2的CONNECT_BY_ROOT函数以及START WITH和CONNECT BY PRIOR来处理类似下面的伪代码,然后将其UNION到Queries 1-4。
SELECT CONNECT_BY_ROOT
PLANT,CHILD AS PARTNO
FROM BOMTABLE
START WITH
PLANT IN (Queries 1 thru 4)
AND
PARENT IN (Queries 1 thru 4)
CONNECT BY PRIOR
PLANT IN (Queries 1 thru 4)
AND
CHILD = PARENT
但是,对于START WITH和CONNECT BY PRIOR语句,我感到困惑。
-
我是否必须使用查询1-4作为START WITH子句的源?鉴于此,我该怎么办 我必须确保在执行时父母尊重相应的植物。
-
从植物的开始到开始,我将承担相同的条件吗?而对于PARTNO I 在孩子=父母的地方设置我的递归?
使用此文档作为参考:
解决方法
使用递归公用表表达式(RCTE),而不是非标准的data = pd.ExcelFile("/content/data.ods")
sales = pd.read_excel(data,'Sheet1')
customers = pd.read_excel(data,'Sheet2')
dates = pd.read_excel(data,'Sheet3')
employees = pd.read_excel(data,'Sheet4')
sales.head()
customers.head()
dates.head()
employees.head()
构造
这里有一个BOM表示例https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/db2/rbafzrecurse.htm