我在oracle中有数据库表,例如,
ID status cycle
T051 Passed s1
T051 Failed s1
T061 Failed s1
T061 Failed s1
T051 Failed s2
Run Code Online (Sandbox Code Playgroud)
我想要这样的输出
ID cycle pass fail
T051 s1 1 0
T061 s1 0 1
T051 s2 0 1
Run Code Online (Sandbox Code Playgroud)
逻辑:-> 如果相应 id&cycle 任何状态通过,则其通过计数为 1;如果相应 id&cycle 所有状态失败,则失败计数 1
有人可以帮忙吗?
您可以使用MIN聚合MAX函数对此查询执行等效的布尔逻辑,用于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
Run Code Online (Sandbox Code Playgroud)
输出:
ID CYCLE PASS FAIL
T051 s1 1 0
T051 s2 0 1
T061 s1 0 1
Run Code Online (Sandbox Code Playgroud)