DataSet实现行转列(多维)

DataSet set = service.querys("V_HR_SALARY");
DataSet groups = set.pivot("EMPLOYEE_CODE,EMPLOYEE_NM","YM,TYPE_CODE","PRICE");
//EMPLOYEE_CODE,EMPLOYEE_NM 作为主键,决定结果有多少行
//YM,TYPE_CODE 转换维度,决定有结果有多少列,结果列数量=月份数量*类别数量
//PRICE 取哪一列值,如果不指定则将整行作为值返回

/**
     * 行转列
     * 表结构(编号, 姓名, 年度, 科目, 分数, 等级)
     * @param pks       唯一标识key(如编号,姓名)
     * @param classKeys 分类key(如年度,科目)
     * @param valueKeys 取值key(如分数,等级),如果不指定key则将整行作为value
     * @return
     * 如果指定key
     * 返回结构 [
     *      {编号:01,姓名:张三,2010-数学-分数:100},
     *      {编号:01,姓名:张三,2010-数学-等级:A},
     *      {编号:01,姓名:张三,2010-物理-分数:100}
     *  ]
     *  如果只有一个valueKey则返回[
     *      {编号:01,姓名:张三,2010-数学:100},
     *      {编号:01,姓名:张三,2010-物理:90}
     *  ]
     * 不指定valuekey则返回 [
     *      {编号:01,姓名:张三,2010-数学:{分数:100,等级:A}},
     *      {编号:01,姓名:张三,2010-物理:{分数:100,等级:A}}
     *  ]
     */

    public DataSet pivot(List<String> pks, List<String> classKeys, List<String> valueKeys) 


原数据(720行,20个人,12个月,3个类别)

序号 工号 姓名 月份 类别 金额
1 1001 风清扬 2020-01 底薪 15100.00
2 1001 风清扬 2020-01 奖金 3600.00
3 1001 风清扬 2020-01 扣除 -800.00
4 1001 风清扬 2020-02 底薪 28000.00
5 1001 风清扬 2020-02 奖金 1100.00
6 1001 风清扬 2020-02 扣除 -500.00
7 1001 风清扬 2020-03 底薪 13900.00
8 1001 风清扬 2020-03 奖金 3000.00
9 1001 风清扬 2020-03 扣除 -900.00
10 1001 风清扬 2020-04 底薪 10400.00

转换结果(20行-20个人)(36列-12个月,3个类别)

工号 姓名 2020-01 2020-02 2020-03 2020-04 2020-05
底薪 奖金 扣除 底薪 奖金 扣除 底薪 奖金 扣除 底薪 奖金 扣除 底薪 奖金 扣除
1001 风清扬 15100.00 3600.00 -800.00 28000.00 1100.00 -500.00 13900.00 3000.00 -900.00 10400.00 2800.00 -500.00 14000.00 200.00 -800.00
1002 步惊云 18900.00 3300.00 -200.00 24300.00 4900.00 -400.00 22600.00 4900.00 -900.00 16600.00 2800.00 -900.00 12400.00 4400.00 -800.00
1003 李寻欢 29000.00 300.00 -600.00 24700.00 2000.00 -100.00 19900.00 4200.00 -200.00 17900.00 1500.00 -600.00 12800.00 600.00 -800.00
1004 西门吹雪 10900.00 900.00 -700.00 13500.00 1100.00 -100.00 16400.00 3600.00 -300.00 28700.00 600.00 -200.00 25800.00 4200.00 -300.00
1005 练霓裳 25500.00 3700.00 -900.00 13200.00 2900.00 -700.00 28500.00 3100.00 -200.00 10100.00 4300.00 -100.00 16400.00 800.00 -800.00
1006 丁春秋 13400.00 2200.00 -500.00 16100.00 2600.00 -700.00 22400.00 300.00 -800.00 14200.00 1100.00 -900.00 29900.00 3100.00 -400.00
1007 邀月 23400.00 1800.00 -100.00 28900.00 1400.00 -100.00 22600.00 500.00 -600.00 12800.00 2800.00 -300.00 16500.00 100.00 -800.00
1008 王语嫣 20100.00 4100.00 -500.00 15600.00 1900.00 -500.00 26100.00 4800.00 -400.00 14700.00 1100.00 -100.00 12300.00 2500.00 -400.00
1009 上官无极 28700.00 3800.00 -600.00 20700.00 4800.00 -600.00 29200.00 1100.00 -200.00 22400.00 4700.00 -300.00 20900.00 500.00 -600.00
1010 欧阳锋 11900.00 1700.00 -700.00 18700.00 1600.00 -300.00 24300.00 2700.00 -300.00 28000.00 1900.00 -800.00 20400.00 2500.00 -100.00
1011 黄药师 14300.00 2200.00 -400.00 26100.00 1200.00 -800.00 18200.00 2100.00 -300.00 21900.00 1800.00 -400.00 29500.00 1200.00 -400.00
1012 令狐冲 16600.00 4700.00 -600.00 28800.00 2000.00 -900.00 19000.00 700.00 -600.00 10700.00 2200.00 -800.00 20200.00 1000.00 -300.00
1013 任我行 19000.00 4000.00 -600.00 26800.00 3400.00 -800.00 23700.00 2500.00 -700.00 27600.00 1100.00 -900.00 26300.00 400.00 -600.00
1014 李莫愁 19900.00 500.00 -100.00 23800.00 4000.00 -800.00 19400.00 4900.00 -200.00 16800.00 400.00 -800.00 25100.00 2700.00 -800.00
1015 燕十三 13000.00 2200.00 -900.00 13900.00 1400.00 -700.00 14000.00 3400.00 -200.00 16200.00 3800.00 -800.00 26800.00 3800.00 -300.00
1016 燕南天 20800.00 3800.00 -100.00 23100.00 100.00 -900.00 13900.00 300.00 -400.00 17000.00 2500.00 -700.00 27100.00 2000.00 -500.00
1017 周芷若 14800.00 1300.00 -600.00 25000.00 4400.00 -900.00 22700.00 4600.00 -700.00 24900.00 4300.00 -100.00 18400.00 2400.00 -300.00
1018 慕容复 24500.00 1300.00 -400.00 25300.00 100.00 -500.00 16700.00 700.00 -300.00 27300.00 2200.00 -100.00 12600.00 1600.00 -800.00
1019 张无忌 19900.00 2500.00 -300.00 23100.00 1000.00 -500.00 10800.00 4800.00 -800.00 29500.00 1500.00 -700.00 11500.00 2400.00 -900.00
1020 小龙女 12900.00 1100.00 -700.00 12900.00 4800.00 -100.00 13600.00 800.00 -600.00 19200.00 1700.00 -400.00 20000.00 400.00 -600.00
其他文档