按行和列分组

Group in rows and column

我是 sql 的新手,我有一个无法解决的问题,我有一个视图,它结合了来自执行不同操作的不同表的信息,基本上,简化了,它看起来有点像这样:

Risk_Status    Task_Name     Completion 
---------------------------------------
Green              Task1        On Time 
Yellow             Task2        Delayed 
Yellow             Task3        On Time 
Green              Task4        Delayed
Red                Task5        Delayed
Yellow             Task5        Delayed
Red                Task5        On Time
Red                Task5        Delayed

我想要完成的是按状态对所有任务进行分组,跟踪属于每个状态的任务数量,并有一列列出所有延迟或按时属于不同状态的任务:

Status      Number of Tasks    Number of Delayed Tasks
-------------------------------------------------------
Green                     2                          1
Yellow                    3                          2
Red                       3                          2

我已经尝试复制 from 子句中的视图并使其 select 仅延迟 class 处的任务,但它没有给我准确的结果,我不确定还有什么试试。

感谢任何帮助:)

您可以使用条件聚合:

select status, count(*) as NumTasks,
       sum(case when completion = 'Delayed' then 1 else 0 end) as NumDelayedTasks
from yourview
group by status;

您好,您可以使用以下查询。

WITH sample_data(riskstatus,taskname,completion)
AS
(
SELECT 'Green','Task1','On Time' FROM dual
UNION ALL
SELECT 'Yellow','Task2','Delayed' FROM dual
UNION ALL
SELECT 'Yellow','Task3','On Time' FROM dual
UNION ALL
SELECT 'Green','Task4','Delayed' FROM dual
UNION ALL
SELECT 'Red','Task5','Delayed' FROM dual
UNION ALL
SELECT 'Yellow','Task5','Delayed' FROM dual
UNION ALL
SELECT 'Red','Task5','On Time' FROM dual
UNION ALL
SELECT 'Red','Task5','Delayed' FROM dual
)
SELECT riskstatus,count(taskname),sum(decode(completion,'Delayed',1,0))
FROM sample_data
GROUP BY riskstatus;