Решено бизнес-требование с использованием описания случая.Оператор case одинаков для нескольких атрибутов даты.Мне известно, что оператор case работает с одним атрибутом за раз и делает его повторяющимся с помощью динамического SQL, но мы не хотим использовать динамический SQL.Есть ли способ упростить инструкцию case, чтобы она хотя бы выглядела повторяющейся и понятной?Есть идеи?
CASE
WHEN Status IN ('Denied','Partial Approval') and NotificationDate <> '1900-01-01' AND NotificationDate < Requestdate THEN 'Error'
WHEN Status IN ('Denied','Partial Approval') and NotificationDate >= RequestDate THEN
CASE
when Type in ('Non-Urgent Preservice','Non-Urgent Concurrent') AND DateDiff(d,RequestDate,NotificationDate) <= 15 then 'Y'
when Type = 'Post Service' AND DateDiff(d,RequestDate,NotificationDate) <= 30 then 'Y'
when Type = 'Urgent Preservice' AND DateDiff(d,RequestDate,NotificationDate) <= 3 then 'Y'
when Type = 'Urgent Concurrent' AND DateDiff(d,RequestDate,NotificationDate) <= 3 then 'Y'
ELSE 'N'
END
ELSE
CASE WHEN Status IN ('Denied','Partial Approval') and NotificationDate IS NULL THEN
CASE
when Type in ('Non-Urgent Preservice','Non-Urgent Concurrent') AND DateDiff(d,RequestDate, getdate()) > 15 then 'N'
when Type = 'Post Service' AND DateDiff(d,RequestDate, getdate()) > 30 then 'N'
when Type = 'Urgent Preservice' AND DateDiff(d,RequestDate, getdate()) > 3 then 'N'
when Type = 'Urgent Concurrent' AND DateDiff(d,RequestDate, getdate()) > 3 then 'N'
ELSE ''
END
ELSE 'N/A'