单表内分组父子聚合显示功能,带子查询

表数据
姓名金额项目名发放日期类别
张三1项目12020/02/02金额
李四2项目12020/02/02金额
合计3项目12020/02/02合计

 按项目名、发放日期分组

SELECT * from 表名 where 
类别 = #{类别,jdbcType=VARCHAR}  
<if test='类别 != null and 类别 != "" and 类别 == "奖金"'>
    <!-- 子页面查询条件一一对应 -->
    <if test='姓名 != null and 姓名 != ""'>
        AND 姓名 = #{姓名,jdbcType=VARCHAR}
    </if>
    <if test='部门 != null and 部门 != ""'>
        AND 部门 = #{部门,jdbcType=VARCHAR}
    </if> 
</if>
and 项目名||发放日期 in 
(SELECT 项目名||发放日期 from 表名 
<!-- 父页面查询条件 -->
WHERE 字段...(不能包含【类别】字段)='');

页面跳转

    @GetMapping("/displayDeductMoneyDetailPage")
    public ModelAndView displayDeductMoneyDetailPage(Model model,String 项目名,String 发放日期) {
        if (StrUtil.isBlank(项目名)||StrUtil.isBlank(type2)) {
            model.addAttribute("类别", "合计");
        }else {
            model.addAttribute("类别", "金额");
        }
        return new ModelAndView("表格分页html");
    }

 分页接口

    @PostMapping("/分页接口")
    public Object 分页接口(Integer pageNo, Integer pageSize, String orderBy, 实体类) {
        PageHelper.startPage(pageNo, pageSize, orderBy);
        List<?> list = service.分页(实体类);
        return new Page<>(list);
    }

页面

            {
                header: '操作',
                name: '显示明细',
                align: "center",
                sortable: false,
                formatter: function (val, obj, row, act) {
                    return '<button onclick="show(\'' + row.项目名+ '\',\'' + row.发放日期+ '\')">显示明细</button>';
                }
            },
        gridComplete:function(){
            if ('${类别}' == '合计') {
                //表格 隐藏列
                $("#dataGrid").dataGrid('hideCol', '姓名');
            } else if ('${类别}' == '金额') {
                //表格 隐藏列
                $("#dataGrid").dataGrid('hideCol', '显示明细');
                $("#dataGrid").dataGrid('hideCol', '操作');
                //功能按钮 隐藏
                $("#xxx").hide();
                //查询条件 隐藏
                $("#xxx").parents('div[class="form-group"]').hide();
            }
        }
    function show(type1, type2) {
        layui.layer.open({
            anim: false,
            isOutAnim: false,
            title: false,
            closeBtn: true,
            shadeClose: false,
            skin: 'demo-class',
            type: 2,
            area: ['97%', '90%'],
            content: '分页接口?项目名=' + 项目名+ '&发放日期=' + 发放日期,
            btn: false
        });
    }

gorm是一个非常流行的golang ORM库,它可以轻松地操作数据库。在gorm中,可以使用Preload方法来实现单表父子级递归查询。下面是一个示例代码: ```go type Category struct { ID uint Name string ParentID uint Children []Category } func (c *Category) GetAllChildren(db *gorm.DB) error { return db.Where("parent_id = ?", c.ID).Find(&c.Children).Error } func (c *Category) GetAllDescendants(db *gorm.DB) ([]Category, error) { var descendants []Category err := db.Where("parent_id = ?", c.ID).Find(&descendants).Error if err != nil { return nil, err } for i := range descendants { children, err := descendants[i].GetAllDescendants(db) if err != nil { return nil, err } descendants[i].Children = children } return descendants, nil } func main() { db, err := gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/database"), &gorm.Config{}) if err != nil { panic("failed to connect database") } var rootCategory Category err = db.First(&rootCategory, "parent_id = ?", 0).Error if err != nil { panic("failed to get root category") } err = rootCategory.GetAllChildren(db) if err != nil { panic("failed to get all children") } fmt.Printf("%+v\n", rootCategory) descendants, err := rootCategory.GetAllDescendants(db) if err != nil { panic("failed to get all descendants") } fmt.Printf("%+v\n", descendants) } ``` 在上面的代码中,我们定义了一个Category结构体,它包含了ID、Name、ParentID和Children四个字段。GetAllChildren方法用于获取当前分类的所有子分类,GetAllDescendants方法用于获取当前分类的所有后代分类。在GetAllDescendants方法中,我们使用递归的方式获取所有后代分类,并将它们存储在Children字段中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值