Я постараюсь это как можно лучше. Я знаю, что вы помогаете, когда вы также понимаете вопрос :)Возвращаемые строки с одинаковым идентификатором после определенного статуса
У меня есть столбец с различным ApplicationStatus с тем же ApplicationID. Когда ApplicationStatus достигает «Аудит завершен» в первый раз, и есть какая-либо деятельность ПОСЛЕ того, что тогда он должен возвращать эти ApplicationStatuses (даже если «Complete Complete» снова появляется после «Complete Complete» ApplicationStatus. Затем, когда «Audit Complete» не появляются в группе ApplicationID-х, то он должен также не возвращать эти строки
Это то, что я хотел бы вернуться (остальные столбцы не имеют каких-либо проблем).
ApplicationID | Application Status
----------------|--------------------
926521 | Submitted to Bank
926521 | Audit Complete
Первый «Application Complete» ApplicationStatus может отображаться в любой строке группы ApplicationID.
Вот код, который я попробовал (Дайте мне знать, если вы хотите, чтобы я сократить код (я просто хотел показать вам, что я пробовал):
WITH CTE
AS
(
SELECT
status.ApplicationID AS [Application ID],
ROW_NUMBER() OVER(PARTITION BY status.ApplicationID ORDER BY status.ApplicationID) AS [Row Number],
status.ApplicationStatusMovementID AS [Application Status Movement ID],
status.ApplicationStatus AS [Application Status],
status.Comment,
status.CreatedDate AS [Created Date],
app.BondFacilitator AS [Bond Facilitator],
CASE
WHEN COUNT(*) OVER(PARTITION BY status.ApplicationID) > 3 AND status.ApplicationStatus IN ('Audit Complete') --OR COUNT(*) OVER(PARTITION BY status.ApplicationID) > 3
THEN 'NO'
WHEN COUNT(*) OVER(PARTITION BY status.ApplicationID) > 3 AND status.ApplicationStatus NOT IN ('Audit Complete') --OR COUNT(*) OVER(PARTITION BY status.ApplicationID) > 3
THEN 'FINE'
ELSE 'FINE'
END AS [Status]
FROM Import.OobaApplicationStatusMovement AS status
LEFT OUTER JOIN Import.OobaApplication AS app ON status.ApplicationID = app.ApplicationID
GROUP BY
status.ApplicationID,
ApplicationStatusMovementID,
status.ApplicationStatus,
Comment,
status.CreatedDate,
BondFacilitator
)
SELECT [Application ID],
[Row Number],
[Application Status Movement ID],
[Application Status],
Comment,
[Created Date],
[Bond Facilitator],
[Status],
IIF(COUNT(*) OVER(PARTITION BY [Application ID]) > COUNT([Status]) OVER(PARTITION BY [Application ID], [Status]), 'NO', 'YES') AS [Activity After Audit Completed]
FROM (
SELECT [Application ID],
[Row Number],
[Application Status Movement ID],
[Application Status],
Comment,
[Created Date],
[Bond Facilitator],
[Status],
IIF(COUNT(*) OVER(PARTITION BY [Application ID]) > COUNT([Status]) OVER(PARTITION BY [Application ID], [Status]), 'NO', 'YES') AS [Activity After Audit Completed]
FROM CTE) AS result
WHERE [Row Number] IN
(SELECT [Row Number] + i
FROM CTE
CROSS JOIN (SELECT 2 AS i UNION ALL SELECT 3 UNION ALL SELECT 15) AS n
WHERE [Application Status] = 'Audit Complete') AND [Activity After Audit Completed] IN ('NO') AND Status IN ('FINE', 'NO')
ORDER BY [Application ID], [Created Date]
Добро пожаловать, , Рад, что смог помочь. Было бы здорово, если бы вы согласились с моим ответом. – Tyron78