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 中动态拼出的表达式