下表中,[MonthEndDate]
有非空值。与此相关,从[employeeId]
列到[jobDescription]
列,所有空值应向前填充第4行到第16行的数据,最后2列即[StaffTypeID]
和[Description]
。所有的空值都应该用行1到行12中的数据向前填充,并且对于其余的行类似。
请使用此包含所需CREATE和INSERT语句的db-fiddle链接在问题语句中生成表。Table 1
是问题陈述中的表格,Table 2
是所需的输出。
我将不胜感激,如果你能分享所需的SQL代码。
- 一米七三**
| 月结束日期|雇员ID|最后一天工作生效日期|员工类型|员工状态|计划工时|主管ID|作业代码|作业描述|人员类型ID|说明|
| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------|
| 2013年5月31日|||||||||1个|会计助理|
| 2013年6月30日|||||||||||
| 2013年7月31日|一○一|2013年6月30日|内部|A类|80.0分||C101|实习生-咨询|||
| 2013年8月31日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|||
| 2013年9月30日|||||||||||
| 2013年10月31日|||||||||||
| 2013年11月30日|||||||||||
| 二〇一三年十二月三十一日|||||||||||
| 2014年1月31日|||||||||||
| 2014年2月28日|||||||||||
| 2014年3月31日|||||||||||
| 2014年4月30日|||||||||||
| 2014年5月31日|||||||||五个|顾问|
| 2014年6月30日|||||||||||
| 2014年7月31日|||||||||||
| 2014年8月31日|||||||||||
| 2014年9月30日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|||
| 2014年10月31日|||||||||||
| 2014年11月30日|||||||||||
| 2014年12月31日|||||||||||
| 2015年1月31日|||||||||||
| 2015年2月28日|||||||||||
| 2015年3月31日|||||||||||
| 2015年4月30日|||||||||||
| 2015年5月31日|||||||||||
表二:
| 月结束日期|雇员ID|最后一天工作生效日期|员工类型|员工状态|计划工时|主管ID|作业代码|作业描述|人员类型ID|说明|
| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------|
| 2013年5月31日|||||||||1个|会计助理|
| 2013年6月30日|||||||||1个|会计助理|
| 2013年7月31日|一○一|2013年6月30日|内部|A类|80.0分||C101|实习生-咨询|1个|会计助理|
| 2013年8月31日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|1个|会计助理|
| 2013年9月30日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|1个|会计助理|
| 2013年10月31日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|1个|会计助理|
| 2013年11月30日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|1个|会计助理|
| 二〇一三年十二月三十一日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|1个|会计助理|
| 2014年1月31日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|1个|会计助理|
| 2014年2月28日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|1个|会计助理|
| 2014年3月31日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|1个|会计助理|
| 2014年4月30日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|1个|会计助理|
| 2014年5月31日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|五个|顾问|
| 2014年6月30日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|五个|顾问|
| 2014年7月31日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|五个|顾问|
| 2014年8月31日|一○一|2013年8月31日|内部|T型|80.0分||C101|实习生-咨询|五个|顾问|
| 2014年9月30日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|五个|顾问|
| 2014年10月31日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|五个|顾问|
| 2014年11月30日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|五个|顾问|
| 2014年12月31日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|五个|顾问|
| 2015年1月31日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|五个|顾问|
| 2015年2月28日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|五个|顾问|
| 2015年3月31日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|五个|顾问|
| 2015年4月30日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|五个|顾问|
| 2015年5月31日|一○一|2014年9月30日|注册|A类|80.0分|S101| C201|工作人员顾问|五个|顾问|
2条答案
按热度按时间iklwldmw1#
这只显示了对于列
employeeId,last_day_jobeffectiveDate
如何执行此操作。它对每列使用孤岛和间隙算法
剩下的你当然要完成
您需要检查每一列的
CASE WHEN
,因为它决定了哪些情况应该获得MAX
值,哪些情况不应该| 月结束日期|雇员ID|最后一天工作生效日期|员工类型|员工状态|计划工时|主管ID|作业代码|作业描述|人员类型ID|说明|
| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------|
| 2013年5月31日| |* 空 *| | | * 无效 | | | |1个|会计助理|
| 2013年6月30日| | 无效 *| | | * 无效 | | | | 无效 ||
| 2013年7月31日|一○一|2013年6月30日|内部|A类|八十| |C101|实习生-咨询| 无效 ||
| 2013年8月31日|一○一|2013年8月31日|内部|T型|八十| |C101|实习生-咨询| 无效 ||
| 2013年9月30日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 二〇一三年十月三十一日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 二〇一三年十一月三十日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 二〇一三年十二月三十一日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 2014年1月31日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 2014年2月28日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 2014年3月31日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 2014年4月30日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 2014年5月31日|一○一|2013年8月31日| | | 无效 | | ||五个|顾问|
| 2014年6月30日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 2014年7月31日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 2014年8月31日|一○一|2013年8月31日| | | 无效 | | | | 无效 ||
| 2014年9月30日|一○一|2014年9月30日|注册|A类|八十|S101| C201|工作人员顾问| 无效 ||
| 二〇一四年十月三十一日|一○一|2014年9月30日| | | 无效 | | | | 无效 ||
| 2014年11月30日|一○一|2014年9月30日| | | 无效 | | | | 无效 ||
| 二〇一四年十二月三十一日|一○一|2014年9月30日| | | 无效 | | | | 无效 ||
| 2015年1月31日|一○一|2014年9月30日| | | 无效 | | | | 无效 ||
| 2015年2月28日|一○一|2014年9月30日| | | 无效 | | | | 无效 ||
| 2015年3月31日|一○一|2014年9月30日| | | 无效 | | | | 无效 ||
| 2015年4月30日|一○一|2014年9月30日| | | 无效 | | | | 无效 ||
| 2015年5月31日|一○一|2014年9月30日| | | 无效 | | | | 无效 *||
fiddle
iswrvxsc2#
我的做法稍有不同,因为我没有使用合并,而且还被迫使用额外的CTE来解决employeeStatus问题。我还将我的数据放入临时表中,因此您必须更改它。类似于以下操作可能会起作用: