微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将每周薪水信息分成每日

如何解决将每周薪水信息分成每日

我正试图从我们的财务系统中获取薪水数据,并将其分解为每日“成本”,以便与我们的小时工保持一致,以进行更好的数据分析。

现在,薪水数据看起来像这样:

TRXBEGDT  trxenddt  StoreID LaborHours LaborCost
----------------------------------------------
1/12/2020 1/18/2020 1000    40         2000
1/12/2020 1/18/2020 2300    80         4000
1/20/2020 1/20/2020 1000    8          400
1/20/2020 1/20/2020 2300    16         800
1/19/2020 1/25/2020 1000    32         1600
1/19/2020 1/25/2020 2300    64         3200

我需要在trxbegdt和trxenddt之间的工作日中分配LaborHours和LaborCost,这通常是一天或七天,但不一定。

我很乐意提供一个很好的起点,但是我对从哪里开始感到困惑。

最终结果如下:

Date    StoreID LaborHours  LaborCost
-------------------------------------
1/12/2020   1000    5.71    285.5
1/13/2020   1000    5.71    285.5
1/14/2020   1000    5.71    285.5
1/15/2020   1000    5.71    285.5
1/16/2020   1000    5.71    285.5
1/17/2020   1000    5.71    285.5
1/18/2020   1000    5.71    285.5
1/19/2020   1000    4.57    228.5
1/20/2020   1000    12.57   628.5
1/21/2020   1000    4.57    228.5
1/22/2020   1000    4.57    228.5
1/23/2020   1000    4.57    228.5
1/24/2020   1000    4.57    228.5
1/25/2020   1000    4.57    228.5
1/12/2020   2300    11.43   571.5
1/13/2020   2300    11.43   571.5
1/14/2020   2300    11.43   571.5
1/15/2020   2300    11.43   571.5
1/16/2020   2300    11.43   571.5
1/17/2020   2300    11.43   571.5
1/18/2020   2300    11.43   571.5
1/19/2020   2300    9.14    457
1/20/2020   2300    25.14   1257
1/21/2020   2300    9.14    457
1/22/2020   2300    9.14    457
1/23/2020   2300    9.14    457
1/24/2020   2300    9.14    457
1/25/2020   2300    9.14    457

我确实意识到这并不能使数据100%准确,但是比让所有受薪雇员一天都受到打击要更准确。

感谢您的帮助。

解决方法

一个选项使用递归查询:

with cte as (
    select 
        trxbedgt dt,storeid,1.0 * laborhours / datediff(day,trxbedgt,trxenddt) laborhours,1.0 * laborcost / datediff(day,trxenddt) laborcost,trxenddt max_dt
    from mytable
    union all
    select dateadd(day,1,dt),store_id,laborhours,laborcost,max_dt
    from cte
    where dt < max_dt
)
select dt,laborcost 
from cte 
order by store,dt

这将适用于可变长度的日期范围。如果它们是固定的,那么cross apply更简单:

select x.dt,t.store_id,1.0 * t.laborhours / datediff(day,t.trxbedgt,t.trxenddt) laborhours,1.0 * t.laborcost  / datediff(day,t.trxenddt) laborcost
from mytable t
cross apply (values 
    (trxbedgt),(datead(day,trxbedgt)),2,trxbedgt))
    ...
    (datead(day,6,trxbedgt))
) x(dt)
order by t.store_id,x.dt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。