MSSQL库data表存储了航班衔接关系,ID字段是航班组,即有衔接关系的一组航班;ROUTE字段是前后衔接关系,由前后两个航班组成,用短横连接;LNO字段是衔接顺序。
ID | ROUTE | LNO |
1 | JFK-LAX | 1 |
1 | LAX-IAD | 2 |
1 | IAD-ORD | 3 |
5 | MIA-ATL | 1 |
5 | ATL-MIA | 2 |
2 | SEA-IAH | 1 |
2 | IAH-AUS | 2 |
2 | AUS-SEA | 3 |
现在要算出每组航班的完整的衔接序列,并按航班组排序,仍然用短横连接。
ID | ROUTE |
1 | JFK-LAX-IAD-ORD |
2 | SEA-IAH-AUS-SEA |
5 | MIA-ATL-MIA |
编写SPL代码:
A | |
1 | =sqlServer1.query("select * from data order by ID,LNO") |
2 | =A1.group(ID;~.(ROUTE.split("-")).conj().id@o().concat("-"):ROUTE) |
A1:执行简单SQL,注意排序。
A2:按ID分组,处理每组数据~。先将组内的ROUTE字段按-拆分,再一起合并,对前后重复的航班进行去除重复(不排序去重),最后用-连接。
SPL开源地址