2015-11-05 63 views
0

我是比较新的PL SQL和有写这不下面的程序,它得到了其中6-7不同的查询如下:PL/SQL方法编写复杂程序的最佳实践

选择经理,算上从美国广播公司(*)的银行..........从ABC

选择Manager,COUNT(*)零售.......

现在每个数是不同的部门,而经理可能是一样的。所以问题是,我正在寻找一个最佳的方法,这有助于我将 的数据存储在具有以下结构的单独表格中:

经理:计数银行:计数零售:计数xyz .........

如何确保使用Pl sql,每个管理员都有权对所有列(bank/retai/xyz)进行计数,首先是如何存储多个不同的查询结果并对其进行处理。我认为我们可以使用光标,但我需要研究它,这个过程也应该是高性能的。 请建议。

感谢 XslGuy

+2

在我看来像一个学校的功课。 – nop77svk

回答

4

这是有条件的资金很容易实现。希望下面的内容能给你足够的关于你需要做什么的想法:

with sample_data as (select 1 id, 1 dept, 10 val from dual union all 
        select 2 id, 1 dept, 20 val from dual union all 
        select 3 id, 2 dept, 30 val from dual union all 
        select 4 id, 3 dept, 40 val from dual union all 
        select 5 id, 1 dept, 50 val from dual union all 
        select 6 id, 3 dept, 60 val from dual union all 
        select 7 id, 2 dept, 70 val from dual union all 
        select 8 id, 4 dept, 80 val from dual) 
-- end of creating a subquery that contains some sample data. See sql below: 
select sum(case when dept = 1 then val end) dept_1_total, 
     sum(case when dept = 2 then val end) dept_2_total, 
     sum(case when dept = 3 then val end) dept_3_total 
from sample_data 
where dept in (1, 2, 3); 

DEPT_1_TOTAL DEPT_2_TOTAL DEPT_3_TOTAL 
------------ ------------ ------------ 
      80   100   100 
+0

...或通过常规的“按部门分组”组织循环游标。 – nop77svk

+2

@ nop77svk虽然通过查询的标准组将给出总计,但它会将它们作为行,而不是列。由于OP想要将不同的部门计数作为单独的列存储在表中,因此按查询分组需要额外的工作来将结果转换为正确的格式。当你可以直接做条件和直接得到格式结果时,为什么还要打扰呢? – Boneist

+0

如果你用'id'分组,它会更适合OP。 –