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

时间:2013-05-07 12:57:53

标签: sql sql-server

我正在尝试为部门表中的每个部门获取一个最新的Approved风险评估(它是bit列)。

我还需要对所有部门进行所有非Approved风险评估,但我认为我可能会将其作为单独的查询或联合两个结果集。

这是我的架构的简化版本,它的价值在哪里。

Department to RiskAssement table diagram

2 个答案:

答案 0 :(得分:1)

如果你有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

答案 1 :(得分:0)

要获得latest Approved任务,您需要将审批时间存储到RiskAssessment中的列中,然后您可以使用分组依据和最大值来获得预期结果。

第二部分

  

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

Select DEPTID, id where Approved=0

如果这不是你的意思,我想我不太了解你的问题。