如何解决如何为每位员工汇总5年内6个月范围内的数据?
我是SQL编程的新手,需要您的帮助。 我需要编写一个sql查询,该查询对从加入公司之日起每位员工每6个月的金额和5年之前的累计年数进行累加。
我的表格如下所示
Employee StartDate DealDate Amount
1 10/01/2017 11/01/2017 10000 --Starting month
1 10/01/2017 11/02/2017 15000 --within first 6 month of joining
1 10/01/2017 11/07/2017 20000 --6-12 months
1 10/01/2017 11/01/2018 30000 --12-18 months
1 10/01/2017 11/02/2018 40000 --12-18 months
1 10/01/2017 11/07/2018 50000 --18-24 months
1 10/01/2017 11/01/2019 60000 --24-30 months
1 10/01/2017 11/08/2019 70000 --30-36 months
1 10/01/2017 11/01/2020 80000 --36-42 months
1 10/01/2017 11/07/2020 90000 --42-48 months
2 20/01/2017 11/01/2017 10000 --so on for employee 2
2 20/01/2017 11/02/2017 25000
2 20/01/2017 11/07/2017 40000
2 20/01/2017 11/01/2018 30000
2 20/01/2017 11/02/2018 40000
2 20/01/2017 11/07/2018 50000
2 20/01/2017 11/01/2019 60000
2 20/01/2017 11/08/2019 70000
2 20/01/2017 11/01/2020 80000
and my expected outcome is
Employee StartDate [0-6month] [6-12month] [1 year] [12-18 month] [18-24 month] [2 year]
1 10/01/2017 25000 20000 45000 70000 50000 165000
2 20/01/2017 35000 40000 75000 70000 50000 195000
我尝试了以下
DECLARE @range1start DATE = @date
DECLARE @range1end DATE = (SELECT DATEADD(m,6,@range1start))
DECLARE @range2start DATE = @range1end
DECLARE @range2end DATE = (SELECT DATEADD(m,@range2start))
DECLARE @range3start DATE = @range2end
DECLARE @range3end DATE = (SELECT DATEADD(m,12,@range3start)) '
,然后对每个范围使用大小写条件。我想知道是否有一种更好的方法可以在不使用太多变量和循环的情况下实现这一目标。任何帮助表示赞赏。
谢谢!
解决方法
您可以使用条件聚合-尽管键入时有点冗长:
select
employee,minstartdate startdate,sum(case when dealdate < dateadd(month,6,startdate) then amount end) [0-6 month],sum(case when dealdate >= dateadd(month,startdate) and dealdate < dateadd(month,12,startdate) then amount end) [6-12 month],startdate) then amount end) [1 year],18,startdate) then amount end) [12-18 month],24,startdate) then amount end) [18-24 month],startdate) then amount end) [2 year]
from mytable
group by employee
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。