8.12 转置时解决数据类型不一致的问题
有数据库表 FIRSTTBL,部分数据如下所示:
| ID | PROPERTY | TYPE | STRING | INTEGER | DATETIME | BOLLEAN | XML |
|---|---|---|---|---|---|---|---|
| 1 | firstname | NVARCHAR | John | null | null | null | null |
| 1 | lastname | NVARCHAR | Doe | null | null | null | null |
| 1 | birthdate | DATETIME | null | null | 1986-09-16 | null | null |
| 1 | address | XML | null | null | null | null | eyJh… |
| 1 | flag | BIT | null | null | null | 1 | null |
| 1 | number | INT | null | 20 | null | null | null |
| 2 | … | … | … | … | … | … | … |
表中的数据每 6 条可以转为以下的一条记录,部分结果如下:
| ID | FIRSTNAME | LASTANME | BIRTHDAY | ADDRESS | FLAG | NUMBER |
|---|---|---|---|---|---|---|
| 1 | John | Doe | 1986-09-16 | eyJh… | 1 | 20 |
| 2 | … | … | … | … | … | … |
行转列,将 PROPERTY 中的各字段值(每 6 条)作为新列,取 STRING、INTEGER、DATETIME、BOLLEAN、XML 这几列的非空数据对应新列的数据(转换的同时需要保留各字段的数据类型)
脚本:
| A | |
|---|---|
| 1 | =connect(“MSSQL”) |
| 2 | =A1.query@x(“SELECT * FROM FIRSTTBL”) |
| 3 | =A2.pivot(ID;PROPERTY,~.array().m(4:).ifn();“firstname”:“FIRSTNAME”,“lastname”:“LASTANME”,“birthdate”:“BIRTHDAY”,“address”:“ADDRESS”,“flag”:“FLAG”,“number”:“NUMBER”) |
A3 将 A2 转置,取原记录中第四列及以后的列值中第一个不为空的值作为列值,PROPERTY 列值转成对应大写的字符作为列名
