azure 为每个员工ID插入缺失日期的视图

cnjp1d6j  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(128)

我需要在标题中建议的每个员工ID缺少快照日期时,在Azure SQL数据库的视图中动态显示行,方法是将每个[员工编号]的[快照日期]用作最小和最大日期。[快照日期]始终是该月的最后一天。
这样做的原因是,在几个月的不活动之后,员工将退出各种应用程序,因此他们的记录从报告中“丢失”。但是,我们希望在系统中最后一次看到他们的最后日期之后的每个快照期间继续报告不活动/已删除的员工。
这就是我的数据目前的样子。
Employee Status后面有很多列,我想将这些列[Example Column]中的数据填充为null。
| 员工编号-快照年-月|快照日期|员工编号|员工状态|示例列|
| --|--|--|--|--|
| 2019 - 09 - 22 2019 - 09 - 09| 2022-12-31 00:00:00.0000000| 999999 |非活动|null|
| 2019 - 09 - 22 2019 - 09 - 09| 2022-11-30 00:00:00.0000000| 999999 |非活动|null|
| 粤ICP备09099999号-1| 2022-10-31 00:00:00.0000000| 999999 |非活动|null|
| 2022 - 09 - 09 -2022-2022-09| 2022-09-30 00:00:00.0000000| 999999 |非活动|null|
| 2019 - 09 - 22| 2022-08-31 00:00:00.0000000| 999999 |非活动|null|
| 2022-07 -2022| 2022-07-31 00:00:00.0000000| 999999 |非活动|null|
| 2019 -06 - 22| 2022-06-30 00:00:00.0000000| 999999 |非活动|null|
| 2019 -05 - 22| 2022-05-31 00:00:00.0000000| 999999 |非活动|null|
| 2022- 04 - 04 -2022-04| 2022-04-30 00:00:00.0000000| 999999 |非活动|null|
我想让它看起来像:
| 员工编号-快照年-月|快照日期|员工编号|员工状态|示例列|
| --|--|--|--|--|
| 粤ICP备09099999号-1| 2023-10-31 00:00:00.0000000| 999999 |非活动|null|
| 2023 - 09 - 09 -2023-2023-09| 2023-09-30 00:00:00.0000000| 999999 |非活动|null|
| 2019 -08 - 29 00:00:00| 2023-08-31 00:00:00.0000000| 999999 |非活动|null|
| 2019 -07 - 23| 2023-07-31 00:00:00.0000000| 999999 |非活动|null|
| 2019 -06 - 23| 2023-06-30 00:00:00.0000000| 999999 |非活动|null|
| 2019 -05 - 23| 2023-05-31 00:00:00.0000000| 999999 |非活动|null|
| 2023- 04 - 04 -2023-04| 2023-04-30 00:00:00.0000000| 999999 |非活动|null|
| 2023 - 03 - 03 -2023-03 -2023-03 - 2023| 2023-03-31 00:00:00.0000000| 999999 |非活动|null|
| 2023 - 02 - 02 -2023-02 -2023-02 - 2023| 2023-02-28 00:00:00.0000000| 999999 |非活动|null|
| 2023 - 01 - 01 - 01 -2023-01 -2023-01 - 2023| 2023-01-31 00:00:00.0000000| 999999 |非活动|null|
| 2019 - 09 - 22 2019 - 09 - 09| 2022-12-31 00:00:00.0000000| 999999 |非活动|null|
| 2019 - 09 - 22 2019 - 09 - 09| 2022-11-30 00:00:00.0000000| 999999 |非活动|null|
| 粤ICP备09099999号-1| 2022-10-31 00:00:00.0000000| 999999 |非活动|null|
| 2022 - 09 - 09 -2022-2022-09| 2022-09-30 00:00:00.0000000| 999999 |非活动|null|
| 2019 - 09 - 22| 2022-08-31 00:00:00.0000000| 999999 |非活动|null|
| 2022-07 -2022| 2022-07-31 00:00:00.0000000| 999999 |非活动|null|
| 2019 -06 - 22| 2022-06-30 00:00:00.0000000| 999999 |非活动|null|
| 2019 -05 - 22| 2022-05-31 00:00:00.0000000| 999999 |非活动|null|
| 2022- 04 - 04 -2022-04| 2022-04-30 00:00:00.0000000| 999999 |非活动|null|
更复杂的是,有些员工的快照日期可以追溯到2017-04年。我只想填充从员工编号存在的最小快照日期开始的数据。
我正在寻找类似[https://stackoverflow.com/questions/70393259/insert-rows-of-dates-missing-for-every-id?newreg= ddf 9 bd 38 c12545 d28 ef 93 cba 3bd 61 d44]的解决方案。但是,我无法使用GENERATE_SERIES,因为我的SQL Server版本不支持它,我无法升级。
有人能帮忙吗?

pxyaymoc

pxyaymoc1#

可以使用数字表模拟此功能。创建一个临时表或包含数字序列的公用表表达式(CTE)。然后使用此数字表为每个员工生成指定范围内的日期
你可以使用下面的代码作为参考

  1. -- Create a numbers table or use an existing one
  2. CREATE TABLE Numbers (Number INT);
  3. -- Populate the table with numbers from 1 to a large enough value
  4. -- This example populates numbers from 1 to 1000
  5. INSERT INTO Numbers (Number)
  6. SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
  7. FROM sys.columns AS A
  8. CROSS JOIN sys.columns AS B;
  9. -- Replace 'YourTableName' with your actual table name
  10. WITH DateRanges AS (
  11. SELECT DISTINCT EmployeeNumber,
  12. DATEADD(MONTH, -Number, EOMONTH(GETDATE())) AS SnapshotDate
  13. FROM YourTableName
  14. CROSS JOIN Numbers
  15. -- Adjust the WHERE condition based on your minimum date requirement
  16. WHERE DATEADD(MONTH, -Number, EOMONTH(GETDATE())) >= 'YourMinDateHere'
  17. )
  18. SELECT CONCAT(EmployeeNumber, '-', FORMAT(SnapshotDate, 'yyyy-MM')) AS 'EmployeeNumber-SnapshotYearMonth',
  19. EOMONTH(SnapshotDate) AS 'SnapshotDate',
  20. EmployeeNumber,
  21. 'Inactive' AS 'EmployeeStatus',
  22. NULL AS 'ExampleColumn'
  23. FROM DateRanges
  24. ORDER BY EmployeeNumber, SnapshotDate;

字符串

展开查看全部

相关问题