У меня есть таблица, подобная этой:
Item_ID Action_Code Date_of_action
1 Code'A' 2019-01-01
1 Code'B' 2019-01-15
1 Code'C' 2019-02-05
2 Code'B' 2020-03-05
Что мне нужно сделать, это добавить +1 к каждой записи (Элементу), в которой было выполнено указанное действие c, а затем СУММИТЬ все эти действия так, выходные данные должны выглядеть следующим образом:
Action_Code Total_number_of_actions
Code'A' 5
Code'B' 8
Code'C' 11
Проблема в том, что мне нужно добавить +1 только ОДИН РАЗ за запись, это НАРУЖНОЕ ПРИМЕНЕНИЕ добавило бы +1 несколько раз для одного элемента, если было бы больше действий над этот пункт. Мне нужно добавить +1 только к действию, которое было выполнено ПЕРВЫМ над этим элементом. Я использую OUTER APPLY в своем коде и добавляю 1 через CASE следующим образом:
OUTER APPLY(
SELECT
CASE WHEN
EXISTS
(
SELECT 1
FROM dbo.Action a1
INNER JOIN dbo.ActionType at1
ON at1.ActionType_id = a1.ActionType_id1
WHERE at1.Code in ('Code A')
AND a1.Item_id1 = i.Item_Id
)
THEN 1 ELSE 0 END AS 'Code A'
)MyOuterApply
Эта часть кода будет проверять, существует ли «Код A» на элементе, и если это так, то будет добавить +1. Проблема в том, что на этом элементе также может быть действие с «Кодом B». В этом случае я хочу добавить +1 к действию «Код А», только если действие «Код А» было выполнено до «Кода В».
Как я могу сказать SQL - Когда существует действие «Код А», и это действие было выполнено до «Действие Б» «Действие C» на этот элемент, затем добавьте +1? Также я не могу использовать CTE! Я хотел бы сделать это в этом случае.