Sql 需要加入3个表并返回每个人都超过75岁的结果
我和一位员工在一起 id、姓名、dob、员工id 表文档已被删除 cdid、雇员ID、状态、记录 餐桌预约已经取消 cvid、emplid、slotid 每个人在Employee表中都有记录。Table Appointment存储安排约会的每个人,而Table Documentation是在他们完成约会时插入记录的位置。问题是,他们进行了旁听,在表文档中有一条记录,但在表约会中没有记录。他们想让我找到表中所有75岁以上的员工,但他们目前没有预约,或者从来没有参加过预约 我从下面开始,但我一直在思考如何准确地计算每个人的人数Sql 需要加入3个表并返回每个人都超过75岁的结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,我和一位员工在一起 id、姓名、dob、员工id 表文档已被删除 cdid、雇员ID、状态、记录 餐桌预约已经取消 cvid、emplid、slotid 每个人在Employee表中都有记录。Table Appointment存储安排约会的每个人,而Table Documentation是在他们完成约会时插入记录的位置。问题是,他们进行了旁听,在表文档中有一条记录,但在表约会中没有记录。他们想让我找到表中所有75岁以上的员工,但他们目前没有预约,或者从来没有参加过预约 我从下面开始,但我一直在思
SELECT COUNT(AgeYearsIntTrunc)
FROM (
SELECT DATEDIFF(hour,e.DOB,GETDATE())/8766.0 AS AgeYearsDecimal
,CONVERT(int,ROUND(DATEDIFF(hour,e.DOB,GETDATE())/8766.0,0)) AS AgeYearsIntRound
,DATEDIFF(hour,e.DOB,GETDATE())/8766 AS AgeYearsIntTrunc
FROM [dbo].Employee e
LEFT JOIN [dbo].Documentation d ON e.EmplID = d.EMPLID
WHERE d.Status IS NULL
) dt WHERE AgeYearsIntTrunc >='75'
通常最好不要期望编译器为您做代数,换句话说:编写谓词,比如x>y+5,而不是x-y>5 通常,比较日期的最有效方法是保留正在检查的列,而不使用任何函数,在GETDATE端执行任何必要的计算 对于编译器来说,NOT EXISTS比LEFT JOIN/is NULL更容易推理 选择e.*-COUNT* FROM[dbo].Employee e 其中e.DOB