sql在行和向下列之间添加值

时间:2011-03-07 22:47:44

标签: java sql web-applications

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

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   

视图比我展示的要复杂一些。例如,我可能想通过行代码总结所有主管的总数。

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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