有一个视图需要计算报告的状态。然而它变得有点复杂,并寻求一些帮助。
示例数据: http://jsfiddle.net/ZpQ95/4/
在那个例子中,
报告1将被批准
报告2将被拒绝
报告3将等待
报告4将是草案
基本上我需要为此创建状态列。
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 〜雅各布
答案 0 :(得分:1)
您需要一个报告表和一个批准表,以便捕获没有Approvals的表。 所以我的解决方案看起来像这样这是我的SQLFiddle http://www.sqlfiddle.com/#!2/78070
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