组内转置

【问题】

i have a data table see as below .

Per_Code in_out Date Time Type
1110263 1 2013-10-11 09:17:14.0000000 In
1110263 6 2013-10-11 11:37:00.0000000 Break
1110263 5 2013-10-11 11:38:21.0000000 Return
1110263 0 2013-10-11 11:43:21.0000000 NULL
1110263 6 2013-10-11 13:21:30.0000000 Break
1110263 5 2013-10-11 14:25:58.0000000 Return
1110263 2 2013-10-11 18:28:55.0000000 Out

i want a query that show result my data as below:

Per_Code Date In Out Break Return
1110263 2013-10-11 9:17:14 AM 6:28:55 PM 11:37:00 AM 11:38:21 AM
1110263 2013-10-11 9:17:14 AM 6:28:55 PM 1:21:30 PM 2:25:58 PM**

【回答】

SQL 虽然有 pivot 能做转置,但这里需要在分组内的数据做转置,SQL 就非常困难了。

这种情况用 SPL 就容易实现了。

方法一,代码如下:

A
1=demo.query("select * from N100 order by PER_CODE,DATE,TIME")
2=A1.group(PER_CODE,DATE)
3=create(PER_CODE,DATE,In,Out,Break,Return)
4=A2.([1,7,2,3,1,7,5,6].(A2.~(~)))
5=A4.conj([~.PER_CODE,~.DATE]|~.(TIME).m([1,2,3,4])|[~.PER_CODE,~.DATE]|~.(TIME).m([5,6,7,8]))
6=A3.record(A5)

A1: 查询数据所在的 N100 表,并按 Per_code、Date、Time 排序

A2: 按 Per_code、Date 分组,每一组就是一个人一天的 7 条记录。

A3: 创建一个存放最后结果的空序表。

A4: 对每个组,依次取出第 1,7,2,3,1,7,5,6 条记录,这就是有序的全天记录。

A5: 将 A4 每条记录中上午和下午的数据全部整理到一个序列中

A6: 用 A5 生成的序列成员组成 A3 的新记录

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值