Для оператора Oracle SQL Select одним из вариантов будет использование sum
из decoded
столбцов, как показано ниже:
select organisation_name,
sum(decode(approval_status,'approved',1,0)) as "Count(Approved)",
sum(decode(approval_status,'rejected',1,0)) as "Count(Rejected)"
from tab
group by organisation_name;
Вы можете создать хранимую процедуру, возвращаяэти вычисленные значения как результаты:
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;