sql-server - 动态表创建 SQLSever
问题描述
我在 SQL 服务器中有几个表,其中包含员工数据,包括 ID 和时钟时间。我需要创建一个报告来显示每个员工每天的打卡时间。我已经用下面的代码做到了这一点。但是,由于只有在有条目时才会记录打卡时间,所以我需要显示没有员工打卡记录的工作日。我曾考虑在 2019/2020 年制作一张工作日表,其中包括每位员工每天的数据并使用它来加入,但是当有人开始新工作时,该表需要不断更新。
表格有什么办法可以用员工编号更新自己并复制工作日?
任何帮助,将不胜感激
谢谢
select distinct cast(a.DET_NUMBER as varchar) as 'Frontier ID',
e.CDN_CARD_ID,
CONCAT (a.DET_G1_NAME1, ' ', a.DET_SURNAME) as 'Name',
c.POS_TITLE as 'Position',
c.POS_L3_CD as 'Department',
c.POS_L4_CD as 'Department 2',
cast(a.DET_DATE_JND as date) as 'Start Date',
cast(b.TER_DATE as date) as 'Leaving Date',
CONCAT (d.DET_G1_NAME1, ' ', d.DET_SURNAME) as 'Team Manager',
f.CLO_DATE2,
min(CLO_TIME2) over (partition by f.CLO_DATE2, e.CDN_CARD_ID) as earliest_time,
max(CLO_TIME2) over (partition by f.CLO_DATE2, e.CDN_CARD_ID) as latiest_time
from EMDET a
left outer join EMTER b on a.DET_NUMBER = b.DET_NUMBER
left outer join EMPOS c on a.DET_NUMBER = c.DET_NUMBER
left outer join EMDET d on c.POS_MANEMPNO = d.DET_NUMBER
left outer join TACDN e on a.DET_NUMBER = e.DET_NUMBER
left outer join TACLO f on e.CDN_CARD_ID = f.CLO_CARD_NO
Where (b.TER_DATE is null or c.POS_END>=GETDATE())
and c.POS_TITLE is not null
and (c.POS_END<=Cast('1992-01-01' as datetime) or c.POS_END>=GETDATE())
and f.CLO_DATE >='2019-01-01'
order by [Team Manager] asc,
e.CDN_CARD_ID asc,
f.CLO_DATE2 asc
解决方案
您可以使用 CTE 生成日历
DECLARE @Start DATE = '2018-1-1', @End DATE = GETDATE()
;WITH
dates AS
(
SELECT thedate = @Start
UNION ALL
SELECT dateadd(day,1,dates.thedate)
FROM dates
WHERE dateadd(day,1,dates.thedate) <= @End
)
SELECT *
FROM dates c
OPTION (maxrecursion 0);
然后过滤以排除非工作日(周末:直接在您的查询中,假期,假期,许可证等来自其他表)
与您的实际查询左连接
推荐阅读
- ios - RequestRetrier Alamofire 锁不工作
- css - 将样式声明放在正文中是否合法?
- unity3d - 如何在我的 unity3d 着色器中添加透明度?
- filter - RXJS - 按另一个 observable 然后 groupBy 过滤
- javascript - 如何从 UWP Javascript 应用程序中的特定本地文件夹访问图像和视频?
- android - kivy buildozer android https请求失败
- bash - 使用 ImageMagick 无间隙平铺不同纵横比的图像
- ruby-on-rails - 推送到 Heroku - ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: 关系“用户”不存在
- ms-access - 在创建文件夹之前检查 VBA Access 中目录的权限
- java - 具有规范 Blob 列的 Spring 存储库过滤器,Java 中的字符串数组