gpt4 book ai didi

sql - 将周薪信息划分为每日

转载 作者:行者123 更新时间:2023-12-04 08:52:59 24 4
gpt4 key购买 nike

我正在尝试从我们的财务系统中获取工资数据并将其分解为每日“成本”,以便与我们的小时工保持一致,以进行更好的数据分析。
现在,工资数据看起来(某事)是这样的:

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, trxbedgt, 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, storeid, laborhours, 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.trxbedgt, t.trxenddt) laborcost
from mytable t
cross apply (values
(trxbedgt),
(datead(day, 1, trxbedgt)),
(datead(day, 2, trxbedgt))
...
(datead(day, 6, trxbedgt))
) x(dt)
order by t.store_id, x.dt

关于sql - 将周薪信息划分为每日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63999089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com