Sql oracle查询以获取计数

Sql oracle查询以获取计数,sql,oracle,plsql,Sql,Oracle,Plsql,我有一张表格,上面有组织名称和批准状态。批准\ u状态可以是批准/拒绝。如何使用oracle SQL查询和PLSQL过程获取每个组织的已批准和已拒绝记录数这里有一个选项,使用带有case语句的条件聚合: select organisation, count(case when approval_status = 'approved' then 1 end) as approvedcount, count(case when approval_status = 're

我有一张表格,上面有组织名称和批准状态。批准\ u状态可以是批准/拒绝。如何使用oracle SQL查询和PLSQL过程获取每个组织的已批准和已拒绝记录数

这里有一个选项,使用带有
case
语句的
条件聚合

select organisation, 
       count(case when approval_status = 'approved' then 1 end) as approvedcount,
       count(case when approval_status = 'rejected' then 1 end) as rejectedcount
from yourtable
group by organisation
对于Oracle的SQL Select语句,一个选项是使用
decoded
列的
sum
,如下所示:

您可以创建一个存储过程,将这些计算值作为结果返回,如下所示:

如果需要为每个组织输出多行,请在我们的过程中的游标内使用上述最分组的select语句,不带参数,如下所示:

SQL> create or replace procedure pr_get_org_count is    
begin
    for c in
    (  
     select organisation_name,
            sum(decode(approval_status,'approved',1,0)) as cnt_approved ,
            sum(decode(approval_status,'rejected',1,0)) as cnt_rejected
       from tab
      group by organisation_name
    )
    loop
      dbms_output.put(' Organisation Name : '||c.organisation_name);        
      dbms_output.put(' [ Approved Count : '||c.cnt_approved);
      dbms_output.put_line(' - Rejected Count : '||c.cnt_rejected||' ]');
    end loop;
end;
编辑(与评论相关) 您可以将此过程转换为以下样式以邮寄结果:


你预期的结果是什么?下面的两个选项都起作用,只是输出的结果不同。我想将其提取为一份报告,每月通过电子邮件发送。我可以在PLSQL过程中使用此查询吗。请帮我处理这个过程嗨,是的,这很有帮助。。。我想通过电子邮件将此o/p作为报告发送给一些电子邮件id。在同一个存储过程中我可以这样做吗..对于第一个存储过程。。。我在蟾蜍身上执行这项任务。。请帮助我了解如何以表格形式显示输出,这将以一行方式显示o/p。。。有多个组织。对于每个组织,我需要分别计算批准记录和拒绝记录。以表格形式。标题应为组织名称已批准已拒绝。。。在此下方,每个组织名称应显示相应的计数。我无法给您一张显示o/p格式的图片。希望你明白我的意思。非常感谢你帮助我了解这一点concepts@newlearner确切地说,这是另一个输出多组织的选项,正如您所说,它需要一个光标。现在,如果我想以表格格式显示它,就像我们在excel表格中的数据一样。我想创建一个带有边框和3列的表——ORG_NAME、APPROVED、REJECTED。这些应该是列,根据返回的行数,我希望每个列下面都有行。这是可能的,这个表格格式应该作为一封电子邮件的主体发送给少数人。
SQL> set serveroutput on;
SQL> create or replace procedure pr_get_org_count( 
                                             i_org_name tab.organisation_name%type,
                                             o_cnt_approved out pls_integer,
                                             o_cnt_rejected out pls_integer,
                                            ) is

begin
     select sum(decode(approval_status,'approved',1,0)) ,
            sum(decode(approval_status,'rejected',1,0))
       into o_cnt_approved, o_cnt_rejected
       from tab
      where organisation_name = i_org_name;

    dbms_output.put_line(' Approved Count is : '||o_cnt_approved);
    dbms_output.put_line(' Rejected Count is : '||o_cnt_rejected);
    -- these previous two line can be used to show the results through command line.
end;
SQL> create or replace procedure pr_get_org_count is    
begin
    for c in
    (  
     select organisation_name,
            sum(decode(approval_status,'approved',1,0)) as cnt_approved ,
            sum(decode(approval_status,'rejected',1,0)) as cnt_rejected
       from tab
      group by organisation_name
    )
    loop
      dbms_output.put(' Organisation Name : '||c.organisation_name);        
      dbms_output.put(' [ Approved Count : '||c.cnt_approved);
      dbms_output.put_line(' - Rejected Count : '||c.cnt_rejected||' ]');
    end loop;
end;
create or replace procedure pr_get_org_count( 
                                             i_org_name tab.organisation_name%type,
                                             o_cnt_approved out pls_integer,
                                             o_cnt_rejected out pls_integer,
                                            ) is
  v_path  varchar2(4000):='http://www.mycompany.com.tr/main/default.aspx?email=';
  v_email varchar2(4000):='barbaros.ozhan@mycompany.com.tr';
  v_text  varchar2(4000):='My Results | for Approved : ';
  v_url   varchar2(4000);
  v_rep   varchar2(4000);
begin
  select sum(decode(approval_status,'approved',1,0)) ,
         sum(decode(approval_status,'rejected',1,0))
    into o_cnt_approved, o_cnt_rejected
    from tab
   where organisation_name = i_org_name;

   v_text := v_text||to_char(o_cnt_approved)||' - for Rejected : '||to_char(o_cnt_rejected);
   v_url  := v_path||'?email='||v_email||'&email_text='||v_text;
   v_rep  := utl_http.request(utl_url.escape(v_url, false, 'UTF-8'));
end;