2011-03-07 39 views
0

我将一个excel“数据库”移植到真正的数据库应用程序中,客户希望看到熟悉的电子表格视图,其中显示跨行添加的数据并汇总列。这是可能与SQL查询?或者应用程序是否应该执行这些总计算?我正在使用Java和Oracle编写应用程序来实现持久性。sql在行和列之间添加值

Schema: 
    CREATE TABLE CTC_COST_TO_COMPLETE (
    COST_TO_COMPLETE_ID VARCHAR2(24) NOT NULL, 
    LINECODE VARCHAR2(16), 
    DEPT VARCHAR2(6), 
    YEAR VARCHAR2(4), 
    SUPERVISOR VARCHAR2(9), 
    JAN VARCHAR2(12), 
    FEB VARCHAR2(12), 
    MAR VARCHAR2(12), 
    APR VARCHAR2(12), 
    MAY VARCHAR2(12), 
    JUN VARCHAR2(12), 
    JUL VARCHAR2(12), 
    AUG VARCHAR2(12), 
    SEP VARCHAR2(12), 
    OCT VARCHAR2(12), 
    NOV VARCHAR2(12), 
    DEC VARCHAR2(12), 
      ); 

每一行代码存储工时估计每月主管需要

RAW: 
id  Linecode  Dept Year Supervisor Jan  Feb  Mar ... Dec 
1  ED.312  400 2011  P13341  12  10  15 ... 6 
2  GR.544  400 2011  P13341  23  5  1 ... 9 
3  WV.132  400 2011  P13341  2  1  18 ... 16 



Need out on web page: 
    Linecode  Dept Year Supervisor Jan  Feb  Mar ... Dec Sub Total 
    ED.312  400 2011  Rozycki  12  10  15 ... 6   135 
    GR.544  400 2011  Rozycki  23  5  1 ... 9   76 
    WV.132  400 2011  Rozycki  2  1  18 ... 16   89 
==================================================================================== 
             Total 37  16  34 ... 31   300 

视图是一点点比我显示更加复杂。例如,我可能想要按照所有主管的行代码总结总计。

谢谢。

+0

什么是你的数据库设计(方案)? – rkg

+0

我编辑了我的问题以包含模式信息。 – jeff

回答

1

这最好在数据库层之外完成。对于它的价值,你不会像往常一样(或不应该)以行/列格式存储它 - 在这种情况下,列表只发生在显示层。

在渲染时使用2d数组来存储数据,并沿数组的维数求和以获得行/列总数。

+0

当你说不以行/列格式存储时,你是指我的数据库模式吗?换句话说,我的表没有正常化?我没有看到有什么大不了的,因为他们持有每月工时估计值,因此每个记录有12个月的字段。 – jeff

+0

我的查询并不那么简单。我开始调查Oracle ROLLUP。 – jeff

+0

DB层之外 - 在Servlet或View中? – jeff

1

如果你真的想这样做在SQL中的分类汇总,并没有想使用类似PIVOT你可以做这样的事情:

select Jan, Feb, Mar, ..., Dec, Jan + Feb + Mar + ... + Dec AS SubTotal 
from MyTable 

union all 

select SUM(Jan), SUM(Feb), SUM(Mar), SUM(Jan + Feb + Mar + ... + Dec) 
from MyTable