如何解决将每周薪水信息分成每日
我正试图从我们的财务系统中获取薪水数据,并将其分解为每日“成本”,以便与我们的小时工保持一致,以进行更好的数据分析。
现在,薪水数据看起来像这样:
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 举报,一经查实,本站将立刻删除。