我正在将一个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
视图比我展示的要复杂一些。例如,我可能想通过行代码总结所有主管的总数。
感谢。
答案 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