组内多字段同时行转列

例题描述和简单分析

有数据库表FACTTABLE,数据如下所示:

ID

TYPE

VALUE

CURRENCY

ABC

TOT_AMT

3

5.7702

ABC

AMT_AVAL

1

1.9234

ABC

DRWN_AMT

2

3.8468

ABC

MTD_DRWN

2

3.8468

DEF

TOT_AMT

3

5.7702

DEF

AMT_AVAL

1

1.9234

DEF

DRWN_AMT

2

3.8468

DEF

MTD_DRWN

2

3.8468

需要按ID分组,组内多字段同时行转列,结果如下所示:

ID

AMT_AVAL

AMT_AVAL1

DRWN_AMT

DRWN_AMT1

MTD_DRWN

MTD_DRWN1

TOT_AMT

TOT_AMT1

ABC

1

1.9234

2

3.8468

2

3.8468

3

5.7702

DEF

1

1.9234

2

3.8468

2

3.8468

3

5.7702

解法及简要说明

在集算器中编写脚本p1.dfx,如下所示: 


A

1

=connect("mssql")

2

=A1.query@x("SELECT * FROM FACTTABLE")

3

=A2.news([VALUE,CURRENCY];ID,TYPE,~:VALUE).run(if(#%2==0,TYPE=TYPE/"1"))

4

=A3.pivot(ID;TYPE,VALUE)

简要说明:

A1   连数据源为mssql的数据库

A2  返回结果序表,结束时自动关闭数据库连接

A3   CURRENCYVALUE同列,且CURRENCY对应的TYPE值后加个1以示区分

A4  行转列

JAVA 集成这段代码的方法可参考:Java 如何调用 SPL 脚本》

问答搜集

https://stackoverflow.com/questions/64132722/pivot-operator-on-two-columns