【发布时间】:2017-04-12 07:46:47
【问题描述】:
我正在尝试获取我的数据库中存在的一系列日期和相应的值(如果有)。
我有两个参数 - 今天(使用 getDate() 的日期) - 和天数(整数)。对于此示例,我将值 10 用于天数。
获取今天之后 10 天的连续日期的代码:
SELECT top 10 DATEADD(DAY, ROW_NUMBER()
OVER (ORDER BY object_id), REPLACE(getDate(),'-','')) as Alldays
FROM sys.all_objects
我现在需要在连续日期代码中查找每天的几个值,这些值可能存在也可能不存在于时间表中(我们假设所有日期为 8 小时,除非另有说明)。查找将在字段 recordDateTime 上进行。如果该日期的表 cap_time 中不存在“小时”值,我需要返回默认值 8 作为小时数。这是基本查询:
SELECT u.FullName as UserName, d2.department,
recordDateTime, ISNULL(hours,8) as hours
FROM cap_time c
left join user u on c.userID = u.userid
left join dept d2 on u.deptID = d2.DeptID
WHERE c.userid = 38 AND u.deptID = 1
接下来 10 天的最终结果应该是: 日期(连续)、部门、用户名、小时数
我可以使用 TSQL 和一个临时表来完成此操作,但我想看看这是否可以在单个语句中完成。任何帮助表示赞赏。
【问题讨论】:
-
你是说你想得到一个未来十天的列表,然后,不管他们是否有记录,选择那些日期+那些日期可能存在的任何记录?还是只需要未来十天内的任何日期(如果存在)?
-
是的,完全正确。如果没有记录,则返回默认的 8 小时。
标签: sql-server tsql