参考思路来自于: https://www.2cto.com/database/201402/278120.html
最近在写一个查询导出操作, 表的解构是一个 1:N 的关系, 一个发票导出, 一张主发票对应多个明细的, 现在需求传入主表的发票编号作为条件去查询明细表的信息一次性导出, 比如说我查询得到的主表的发票号码, 组成数组 InvioceNos [36853990, 35484365-66, 01410193, 06771778, 07865780], 然后把这个数据作为条件传入查询就可以得到数据集合, 只要在 sql 加入如下两段 sql 即可.
- sql.append("and trim(HEAD.INVOICE_NAME) in :InvioceNos");
- query.setParameterList("InvioceNos", InvioceNos);
数据集合我有个要求就是要根据 IN 的内容进行排序. 因此在网上找了一些资料, 最后使用以下方法即可实现, 代码如下
- if (InvioceNos!=null && InvioceNos.length>0) {
- sql.append("order by case inv_inf.INVOICE_NAME");
- for (int i = 0; i < InvioceNos.length; i++) {
- sql.append("when'"+InvioceNos[i]+"'then"+i+" ");
- }
- sql.append("end"); // 这个必须得添加, 不然会出现错误
- }
最终 sql 输入的 order by 语句如下:
- CASE inv_inf.INVOICE_NAME
- WHEN '36853990'
- THEN 0
- WHEN '35484365-66'
- THEN 1
- WHEN '01410193'
- THEN 2
- WHEN '06771778'
- THEN 3
- WHEN '07865780'
- THEN 4 end;
导出的报表如下:
这是我个人的见解, 如有什么不对的地方请多多包涵, 希望各位多多指导
来源: https://www.cnblogs.com/yxshao/p/10302373.html