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