Вы можете использовать функции агрегирования MIN
и MAX
, чтобы выполнить эквивалент логических логик c для этого запроса, используя MAX
, чтобы проверить, является ли любое значение состояния Passed
, и MIN
, чтобы проверить, является ли какое-либо значение состояния не Failed
:
SELECT ID, cycle,
MAX(CASE WHEN status = 'Passed' THEN 1 ELSE 0 END) AS pass,
MIN(CASE WHEN status = 'Failed' THEN 1 ELSE 0 END) AS fail
FROM data
GROUP BY ID, cycle
ORDER BY ID, cycle
Выход:
ID CYCLE PASS FAIL
T051 s1 1 0
T051 s2 0 1
T061 s1 0 1
Демонстрация на dbfiddle