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 列值转成对应大写的字符作为列名