8.13 将同一行的并列属性拆分到多行

 

有数据库表 TBLORDERS,数据如下所示:

ORDERNUMBER STEP1_STATUS STEP1_START STEP1_END STEP2_STATUS STEP2_START STEP2_END
1 COMPLETE 2020-01-01 2020-02-01 INPROCESS 2020-01-15 2020-02-01
2 COMPLETE 2020-01-01 2020-02-01 INPROCESS 2020-01-15 2020-02-01

这个表实际很宽,这里我们仅取 7 列数据做为示例,需要将同一行的并列属性拆分到多行,结果如下:

ORDERNUMBER STEP_NUMBER STEP_STATUS STEP_START STEP_END DURATION_IN_DAYS
1 STEP1 COMPLETE 2020-01-01 2020-02-01 31
1 STEP2 INPROCESS 2020-01-15 2020-02-01 17
2 STEP1 COMPLETE 2020-01-01 2020-02-01 31
2 STEP2 INPROCESS 2020-01-15 2020-02-01 17

需要在 STEP_NUMBER 中填入 STEP[n],并将 STEP[n]_STATUS、STEP[n]_START、STEP[n]_END 分别填入结果表对应列,同时计算 STEP[n]_END 与 STEP[n]_START 的日期差。

脚本:

A
1 =connect(“MSSQL”).query@x(“SELECT * FROM TBLORDERS”)
2 =create(ORDERNUMBER,STEP_NUMBER,STEP_STATUS,STEP_START,STEP_END,DURATION_IN_DAYS)
3 =((A1.fno()-1)\3).(“A2.insert(0,A1.ORDERNUMBER,"STEP”/#/“",STEP”/#/“_STATUS,STEP”/#/“_START,STEP”/#/“_END,interval(STEP_START,STEP_END))”).concat@c()
4 >A1.run(${A3})
5 return A2

A1 连接数据库取数
A2 产生结果集的数据结构
A3 动态拼表达式,将 A1 中的数据除了第一列,后面的 3n 列,每 3 列对应一个步骤(step),分 n 次,依次往 A2 中插入步骤次序(STEP[n])、STEP[n]_STATUS、STEP[n]_START、STEP[n]_END、STEP[n]_END 与 STEP[n]_START 的日期差
A4 执行 A3 中动态拼出的表达式