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

问题描述:

我试图为部门表中的每个部门获取一个最新的Approved风险评估(它是bit列)。使用SQL,从表中为关联的外键表中的每个关联记录选择单个记录

我也需要所有部门的所有风险评估,但我想我可能会这样做,作为单独的查询或联合两个结果集。

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

Department to RiskAssement table diagram

+3

你到目前为止?问题是什么?或者你只是想让别人做你的工作? – Oscar 2013-05-07 13:00:30

+2

我喜欢有人来做我的工作,你提供?不要以为我只是在等待某个人回复我的拇指,我一直在寻找,最后几次在SO上回答我自己的问题。我真的不记得从哪里开始,这是一段时间,因为我不得不这样做。当我记不起适合谷歌的条款时,很难让自己开始。我怀疑我必须用一个子查询来完成,但这只是我所能得到的。 – BenCr 2013-05-07 13:08:14

+0

FWIW上次我不得不这样做时,公用表表达式甚至不存在,即使我记得我没有找到答案。 – BenCr 2013-05-07 13:21:58

如果您有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 
+0

@Oscar感谢您的纠正,我永远不会记得哪个版本提供了哪个! – 2013-05-07 16:00:05

+0

你先生......刚刚救了我的培根。非常感谢你,奥斯卡和本! – 2013-05-22 15:57:16

要获得latest Approved任务,您将需要存储到列RiskAssessment审批时间,那么你可以使用按组和最大值获得预期结果。

对于第二部分

所有各部门 我认为它时便会更容易没必要的子查询未获批准的风险评估。

Select DEPTID, id where Approved=0 

如果这不是你的意思,我想我不明白你的问题很好。