计算sql/oracle中的通过和失败计数

mit*_*013 1 sql oracle

我在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

有人可以帮忙吗?

Nic*_*ick 5

您可以使用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)

dbfiddle 上的演示