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