i have database table in oracle like,
ID status cycle T051 Passed s1 T051 Failed s1 T061 Failed s1 T061 Failed s1 T051 Failed s2
i want output like this
ID cycle pass fail T051 s1 1 0 T061 s1 0 1 T051 s2 0 1
Logic :-> if respective id&cycle any status is passed then its pass count 1 and if respective id&cycle all status is failed then fail count 1
can Anyone help here ?
Advertisement
Answer
You can use MIN and MAX aggregation functions to perform the equivalent of boolean logic for this query, using MAX to test if any status value is Passed, and MIN to check if any status value is not 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
Output:
ID CYCLE PASS FAIL T051 s1 1 0 T051 s2 0 1 T061 s1 0 1