Hi @Thai Huynh ,
Please try the following solution.
SQL
DECLARE @tbl TABLE (INCIDENCE_ID CHAR(1), ORDER_ID CHAR(2), ORDER_STATUS VARCHAR(20));
INSERT INTO @tbl (INCIDENCE_ID, ORDER_ID, ORDER_STATUS) VALUES
('A', 'A1', 'Completed'),
('A', 'A2', 'Completed'),
('A', 'A3', 'Completed'),
('A', 'A4', 'Completed'),
('A', 'A5', 'Completed'),
('A', 'A6', 'Completed'),
('B', 'B1', 'Completed'),
('B', 'B2', 'Completed'),
('B', 'B3', 'Completed'),
('B', 'B4', 'Open'),
('B', 'B5', 'Completed'),
('B', 'B6', 'Completed'),
('C', 'C1', 'Completed'),
('C', 'C2', 'Open'),
('C', 'C3', 'Open'),
('C', 'C4', 'Open'),
('C', 'C5', 'Open'),
('C', 'C6', 'Open'),
('C', 'C7', 'Open');
;WITH rs AS
(
SELECT INCIDENCE_ID,
SUM(CASE ORDER_STATUS WHEN 'Completed' THEN 1 ELSE 0 END) AS Completed,
COUNT(*) as Total
FROM @tbl
GROUP BY INCIDENCE_ID
)
SELECT t.*
, IIF(rs.Completed = rs. Total, 'complete', 'open') AS FinalStatus
FROM @tbl as t INNER JOIN rs ON t.INCIDENCE_ID = rs.INCIDENCE_ID;