Sql 用于确定我的报告状态的条件查询

Sql 用于确定我的报告状态的条件查询,sql,sql-server,Sql,Sql Server,有一个视图需要计算报表的状态。然而,它变得有点复杂,需要一些帮助 示例数据: 在这个例子中 报告1将获得批准 报告2将被拒绝 第3号报告尚待审议 报告4将是草稿 基本上,我需要为此创建状态列 如果所有5个角色都已批准2,则报告已批准。 如果没有批准记录,则报告为草稿1。 如果有一些批准2而没有拒绝3,则报告将挂起 如果有一项批准被拒绝,则报告被拒绝。 c示例1-已批准: JobRoles.All(j => report.Approvals.Any(a => a.Role == j

有一个视图需要计算报表的状态。然而,它变得有点复杂,需要一些帮助

示例数据:

在这个例子中

报告1将获得批准

报告2将被拒绝

第3号报告尚待审议

报告4将是草稿

基本上,我需要为此创建状态列

如果所有5个角色都已批准2,则报告已批准。 如果没有批准记录,则报告为草稿1。 如果有一些批准2而没有拒绝3,则报告将挂起 如果有一项批准被拒绝,则报告被拒绝。 c示例1-已批准:

JobRoles.All(j => report.Approvals.Any(a => a.Role == j && a.Status == Approvals.Approved))
c第2部分示例-草稿

report.Approvals.Count == 0
c示例3-待定

!report.Approvals.Any(s => s.Status == Approvals.Denied) && report.Approvals.Count > 0
c示例4-拒绝

report.Approvals.Count > 0 && report.Approvals.Any(s => s.Status == Approvals.Denied)
它将是我的主查询上的一个子查询,循环遍历所有报告:

SELECT Id, FromDate, ToDate,
(Status) FROM dbo.Reports AS EX
WHERE  (IsDeleted = 0)
状态表名为:dbo.Approvals

SQL Server 2012

谢谢:D
~Jacob

为了捕获没有批准的表,您需要一个报告表和一个批准表。 所以我的解决方案是这样的。这是我的小提琴

select Reports.Report_id
,case
when exists(select * from Approvals Denied where 
               Denied.Report_id = Reports.Report_id
               and Denied.Status = 3)then
  'Denied'
when (Select count(Approvals.Report_id))=0 then
  'Draft'
when (Select count(Approvals.Report_id))<>5 then
  'Pending'
when (Select count(Approvals.Report_id))=5 then
  'Approved'
end
from Reports
left outer join Approvals
  on Reports.Report_id = Approvals.Report_id

group by
Reports.Report_id