使用SQL,从表中为其关联外键表中的每个关联记录选择一条记录

使用SQL,从表中为其关联外键表中的每个关联记录选择一条记录,sql,sql-server,Sql,Sql Server,我正在尝试获取一份最新批准的风险评估,它是部门表中每个部门的一列 我还需要所有部门的所有未经批准的风险评估,但我认为我可能会将其作为单独的查询或合并两个结果集 下面是我的模式的简化版本,说明它的价值 如果您有SQL 2005或更高版本,则可以使用CTE来实现这一点 with cte as ( select row_number() over (partition by DeptId, order by Submitted desc) as row, id, DeptId,

我正在尝试获取一份最新批准的风险评估,它是部门表中每个部门的一列

我还需要所有部门的所有未经批准的风险评估,但我认为我可能会将其作为单独的查询或合并两个结果集

下面是我的模式的简化版本,说明它的价值


如果您有SQL 2005或更高版本,则可以使用CTE来实现这一点

with cte as (
   select row_number() over (partition by DeptId, order by Submitted desc) as row,
   id,
   DeptId,
   RiskAssessment,
   Submitted,
   Approved
   from RiskAssesment where approved = 1
)

select
   id,
   deptid,
   RiskAssessment,
   Submitted,
   Approved
   from cte where row = 1
要获得最新批准的任务,您需要将批准时间存储在RiskAssessment的列中,然后您可以使用Group by和max获得预期结果

第二部分

所有部门的所有未经批准的风险评估 我认为不需要子查询会更容易


如果这不是你的意思,我想我没有很好地理解你的问题。

到目前为止你有什么?问题是什么?或者你只是想有人做你的工作?我想有人做我的工作,你愿意吗?不要以为我只是在无聊地等待别人的回答,我一直在搜索,最后几次我都在回答自己的问题。我真的不记得从哪里开始了,我已经有一段时间没有这么做了。当我记不起谷歌合适的术语时,我很难开始学习。我怀疑我将不得不使用子查询来完成此操作,但这是我所能做到的。上次我不得不这样做时,FWIW公共表表达式甚至不存在,即使我记得我没有找到答案。@Oscar感谢您的更正,我永远记不起哪个版本提供了哪个版本!先生,你刚刚救了我的命。非常感谢你奥斯卡和本!
Select DEPTID, id where Approved=0