Sql 需要加入3个表并返回每个人都超过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岁以上的员工,但他们目前没有预约,或者从来没有参加过预约 我从下面开始,但我一直在思

我和一位员工在一起 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请以格式化文本的形式显示一些示例数据和预期结果。在“查找所有人”中的何处。。。上面写着计数吗?“目前没有预约或从未以预约的形式进入”的逻辑含义是什么?旁白:ageyearsintrunc>='75'似乎是一个使用文字字符串值'75'的奇怪地方。从来没有在没有DDL的情况下作为步入式进入您的表猜测如何确定这一事实是危险的。目前没有预约的情况也是如此。因此,从发布表的DDL开始。