1

我有下表,为了便于阅读,我对每个案例编号的每个经理进行了分解。

最后一列是倒数第二列的累积和。

理想情况下,月值应该在 1-3 之间(就像您在芝加哥的两种情况下看到的那样)。

但从表中您可以看到在某些情况下缺少某些条目(由 <----- 标记)。

CITY     CASE   CASE_NUMBER   MANAGER  MONTH  MONTHLY_TOTAL   FISCAL_TOTAL 
---------------------------------------------------------------------------
chicago  case_1   1             John       1         2              2     
chicago  case_1   1             John       2         3              5  
chicago  case_1   1             John       3         5              10

chicago  case_1   1             Jeff       1         4              4     
chicago  case_1   1             Jeff       2         2              6  
chicago  case_1   1             Jeff       3         3              9

chicago  case_2   2             John       1         3              3     
chicago  case_2   2             John       2         2              5  
chicago  case_2   2             John       3         4              9

chicago  case_2   2             Jeff       1         2              2     
chicago  case_2   2             Jeff       2         7              9 <----

newyork  case_1   1             Lee        1         3              3     
newyork  case_1   1             Lee        2         4              7 <----

newyork  case_1   1             Sue        1         2              2     
newyork  case_1   1             Sue        2         3              5     
newyork  case_1   1             Sue        3         2              7 

newyork  case_1   2             Lee        1         2              2     
newyork  case_1   2             Lee        2         4              6  
newyork  case_1   2             Lee        3         4              10  

newyork  case_1   2             Sue        1         3              3     
newyork  case_1   2             Sue        2         2              5 <----

我想要的是首先找出那些缺失的行并插入值。

对于那些丢失的月总计 = 0

财务总计 = 上一行中的值。

例如,对于第一个缺失的行,它应该是:

CITY     CASE   CASE_NUMBER   MANAGER  MONTH  MONTHLY_TOTAL   FISCAL_TOTAL 
---------------------------------------------------------------------------
chicago  case_2   2             Jeff       3         0              9
4

2 回答 2

0

假设每个案例的每个经理都应该有三个条目,您可以尝试以下操作:

SELECT City, Case, Manager, COUNT(Manager) AS CASE_COUNT
FROM table(put actual table name)
GROUP BY City, Case, Manager

CASE_COUNT 列将向您显示经理处理的每个案例在表中的条目,如果该数字小于 3,则您知道缺少一个条目(当然这假设应该有 3 个条目对于他们每个人)。

于 2012-11-07T15:47:57.733 回答
0

也许这可以提供一些想法。我在 Postgresql 上运行它,但 Oracle 只需要稍作改动。然后清理一些。这个想法是这样的:

  • 生成月份列表
  • 用一组键交叉乘积月份
  • 然后将结果连接回原始表中的值
  • 对运行总计使用分析函数

设置:

create table theTable(city varchar(64), theCase varchar(64), case_number int, manager varchar(64), month int, monthly_total int, fiscal_total int);


insert into theTable values('chicago', 'case_1', 1, 'John', 1, 2, 2);
insert into theTable values('chicago', 'case_1', 1, 'John', 2, 3, 5);
insert into theTable values('chicago', 'case_1', 1, 'John', 3, 5, 10);

insert into theTable values('chicago', 'case_1', 1, 'Jeff', 1, 4, 4);
insert into theTable values('chicago', 'case_1', 1, 'Jeff', 2, 2, 6);
insert into theTable values('chicago', 'case_1', 1, 'Jeff', 3, 3, 9);

insert into theTable values('chicago', 'case_2', 2, 'John', 1, 3, 3);
insert into theTable values('chicago', 'case_2', 2, 'John', 2, 2, 5);
insert into theTable values('chicago', 'case_2', 2, 'John', 3, 4, 9);

insert into theTable values('chicago', 'case_2', 2, 'Jeff', 1, 2, 2);
insert into theTable values('chicago', 'case_2', 2, 'Jeff', 2, 7, 9);

insert into theTable values('newyork', 'case_1', 1, 'Lee', 1, 3, 3);
insert into theTable values('newyork', 'case_1', 1, 'Lee', 2, 4, 7);

insert into theTable values('newyork', 'case_1', 1, 'Sue', 1, 2, 2);
insert into theTable values('newyork', 'case_1', 1, 'Sue', 2, 3, 5);
insert into theTable values('newyork', 'case_1', 1, 'Sue', 3, 2, 7);

insert into theTable values('newyork', 'case_1', 2, 'Lee', 1, 2, 2);
insert into theTable values('newyork', 'case_1', 2, 'Lee', 2, 4, 6);
insert into theTable values('newyork', 'case_1', 2, 'Lee', 3, 4, 10);

insert into theTable values('newyork', 'case_1', 2, 'Sue', 1, 3, 3);
insert into theTable values('newyork', 'case_1', 2, 'Sue', 2, 2, 5);

询问:

     -- the 3 months
with three as (select 1 AS month  union select 2 union select 3)
            -- select rownum from all_tables where rownum < 4  -- Oracle world

    -- the key
    ,city as (select distinct city, theCase, case_number, manager from theTable)

select x.city, x.theCase, x.case_number, x.manager, x.month, COALESCE(y.monthly_total,0)
      ,SUM(COALESCE(y.monthly_total,0)) OVER (PARTITION BY x.city, x.theCase, x.case_number, x.manager
                                              ORDER BY x.month) AS fiscal_total2
      ,y.fiscal_total

         -- cross product the key to form record for each month
  from ( select c.city, c.theCase, c.case_number, c.manager, t.month
           from city c
               ,three t
       ) x

  -- join "desired" set back to "have" set

  left outer join theTable y ON (    x.city = y.city
                                 and x.theCase = y.theCase
                                 and x.case_number = y.case_number
                                 and x.manager = y.manager
                                 and x.month = COALESCE(y.month, x.month)
                                )

  order by x.city, x.theCase, x.case_number, x.manager, x.month;

结果:

  city   | thecase | case_number | manager | month | coalesce | fiscal_total2 |fiscal_total
---------+---------+-------------+---------+-------+----------+---------------+--------------
 chicago | case_1  |           1 | Jeff    |     1 |        4 |             4 |           4
 chicago | case_1  |           1 | Jeff    |     2 |        2 |             6 |           6
 chicago | case_1  |           1 | Jeff    |     3 |        3 |             9 |           9
 chicago | case_1  |           1 | John    |     1 |        2 |             2 |           2
 chicago | case_1  |           1 | John    |     2 |        3 |             5 |           5
 chicago | case_1  |           1 | John    |     3 |        5 |            10 |          10
 chicago | case_2  |           2 | Jeff    |     1 |        2 |             2 |           2
 chicago | case_2  |           2 | Jeff    |     2 |        7 |             9 |           9
 chicago | case_2  |           2 | Jeff    |     3 |        0 |             9 |
 chicago | case_2  |           2 | John    |     1 |        3 |             3 |           3
 chicago | case_2  |           2 | John    |     2 |        2 |             5 |           5
 chicago | case_2  |           2 | John    |     3 |        4 |             9 |           9
 newyork | case_1  |           1 | Lee     |     1 |        3 |             3 |           3
 newyork | case_1  |           1 | Lee     |     2 |        4 |             7 |           7
 newyork | case_1  |           1 | Lee     |     3 |        0 |             7 |
 newyork | case_1  |           1 | Sue     |     1 |        2 |             2 |           2
 newyork | case_1  |           1 | Sue     |     2 |        3 |             5 |           5
 newyork | case_1  |           1 | Sue     |     3 |        2 |             7 |           7
 newyork | case_1  |           2 | Lee     |     1 |        2 |             2 |           2
 newyork | case_1  |           2 | Lee     |     2 |        4 |             6 |           6
 newyork | case_1  |           2 | Lee     |     3 |        4 |            10 |          10
 newyork | case_1  |           2 | Sue     |     1 |        3 |             3 |           3
 newyork | case_1  |           2 | Sue     |     2 |        2 |             5 |           5
 newyork | case_1  |           2 | Sue     |     3 |        0 |             5 |
(24 rows)
于 2012-11-07T03:30:51.883 回答