一、表结构(ORACLE):
二、表数据
1、统计报表(TJBB),存储报表的基本信息。
1)、SQL语句:
select t.* from TJBB t
2)、执行结果:
2、统计报表明细(TJBBMX),存储报表的指标信息。
1)、SQL语句:
select t.* from TJBBMX t
2)、执行结果:
注意:TJLX字段为3位数字(0或1)组成。每位数字分别代表:今年,去年,同比。若为1,则显示该列。若为0,则不显示该列。即如果此列的值为:111,则此列需要显示:今年、去年、同比。如果此列的值为:101,则此列需要显示:今年、同比。(可结合下图,进行理解)。
三、根据上述列出的TJBB、TJBBMX的数据,动态生成如下图所示的表头。
或者:
四、使用JS实现功能。
1、JAVA后端代码。
package com.webapp.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import com.alibaba.fastjson.JSONObject;
@Controller("TjbbJsController")
@RequestMapping("/tjbbjs")
public class TjbbJsController {
protected static final String VIEW = "/view/test/";
@Autowired
private JdbcTemplate sdJdbcTemplate;
/**
* 。
* @param request
* @param model
* @return
*/
@RequestMapping("/test")
public String test1(HttpServletRequest request, ModelMap model){
try{
String bbbm = "01";
String sql = "select a.bbmc, b.id, b.fid, b.mc, b.tjlx, b.tjsjdw, b.pxxh from tjbb a "
+ "inner join tjbbmx b on a.id = b.bbid where a.bbbm = '"+bbbm+"'";
List list = sdJdbcTemplate.queryForList(sql);
model.addAttribute("list", JSONObject.toJSONString(list));
}catch(Exception e){
e.printStackTrace();
}
return "/tj/tjbbjs";
}
}
其中,根据SQL语句进行查询,结果数据如下图所示:
select a.bbmc, b.id, b.fid, b.mc, b.tjlx, b.tjsjdw, b.pxxh from tjbb a
inner join tjbbmx b on a.id = b.bbid where a.bbbm = '01'
注意:数据未排序。
3、前台页面代码。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript">
function sortArray(array, fObj){
var resultObj = {
};
var resultArray = [];
var idTmp = fObj.hasOwnProperty('ID')?fObj['ID']:'';//父记录的主键
var fpxxh = fObj.hasOwnProperty('PXXH')?fObj['PXXH']:null;//父记录的排序序号
var fcj = fObj.hasOwnProperty('CJ')?fObj['CJ']:null;//父记录的层级
var zdcj = 0;//最大层级
for(var i=0;i<array.length;i++){
var obj = array[i];
var fid = obj.hasOwnProperty('FID')?obj['FID']:'';//父主键
var id = obj.hasOwnProperty('ID')?obj['ID']:'';//主键
var pxxh = obj.hasOwnProperty('PXXH')?obj['PXXH']:null;//排序序号
if(fid==idTmp){
obj['FPXXH']=fpxxh;//子记录存放父记录的排序序号
var cj