2014-01-13 2 views
0

Существует представление, которое необходимо рассчитать состояние отчета. Однако он становится немного сложным и ищет некоторую помощь.Условный запрос для определения состояния моих отчетов

Пример данных: http://jsfiddle.net/ZpQ95/4/

В этом примере

отчет 1 будет утвержден

отчет 2 будет запрещен

отчет 3 будет ожидании

Доклад 4 будет Проект

В принципе, для этого мне нужно создать Status Column.

  1. Если все 5 ролей одобрены (2), то отчет утверждается.
  2. Если нет записей об утверждении, отчет является черновиком (1).
  3. Если есть какие-либо утверждения (2) и нет отрицаний (3), то отчет находится в ожидании
  4. Если есть отказ в утверждении (3), то отчет отклоняется.

C# пример # 1 - Approved:

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

ответ

1

Вам понадобится таблица отчетов, а также таблица одобрения для сбора таблиц, которые не имеют Допуски. Итак, мое решение выглядело так. Вот мой 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 
+0

Спасибо, тонна Кайл! –

Смежные вопросы