网站首页 > java教程 正文
通过增加排序权重逻辑确保特殊部门按指定顺序排列,同时保持序号生成规则一致
SELECT
(SELECT COUNT(*)
FROM (
SELECT
成本中心2,
收款方,
单据公司,
SUM(核定金额) AS 金额,
本位币,
CASE
WHEN 成本中心2 IN ('东区销售部', '北区销售部', '南区销售部', '山东销售部', '西区销售部') THEN
CASE 成本中心2
WHEN '东区销售部' THEN 1
WHEN '北区销售部' THEN 2
WHEN '南区销售部' THEN 3
WHEN '山东销售部' THEN 4
WHEN '西区销售部' THEN 5
END
ELSE 99
END AS 排序权重
FROM [费用明细报表$]
GROUP BY 成本中心2, 收款方, 单据公司, 本位币
) AS T2
WHERE
(T2.排序权重 < T1.排序权重)
OR (T2.排序权重 = T1.排序权重 AND T2.成本中心2 < T1.成本中心2)
OR (T2.排序权重 = T1.排序权重 AND T2.成本中心2 = T1.成本中心2 AND T2.申请人 <= T1.申请人)
) AS 序号,
T1.成本中心2 AS 部门,
T1.申请人,
T1.金额,
T1.本位币 AS 币种,
T1.单据公司
FROM (
SELECT
成本中心2,
收款方 AS 申请人,
SUM(核定金额) AS 金额,
本位币,
单据公司,
0 AS SortOrder,
CASE
WHEN 成本中心2 IN ('东区销售部', '北区销售部', '南区销售部', '山东销售部', '西区销售部') THEN
CASE 成本中心2
WHEN '东区销售部' THEN 1
WHEN '北区销售部' THEN 2
WHEN '南区销售部' THEN 3
WHEN '山东销售部' THEN 4
WHEN '西区销售部' THEN 5
END
ELSE 99
END AS 排序权重
FROM [费用明细报表$]
GROUP BY 成本中心2, 收款方, 单据公司, 本位币
UNION ALL
SELECT
'' AS 成本中心2,
'合计' AS 申请人,
SUM(核定金额) AS 金额,
'CNY' AS 本位币,
'' AS 单据公司,
1 AS SortOrder,
99 AS 排序权重
FROM [费用明细报表$]
) AS T1
ORDER BY
T1.SortOrder ASC,
T1.排序权重 ASC,
T1.成本中心2 ASC,
T1.申请人 ASC
```
优化说明:
1. 排序权重逻辑:
- 为特殊部门(东/北/南/山东/西区销售部)分配1-5的排序权重
- 其他部门默认99权重
- 合计行保留99权重
2. 序号生成优化:
- 在T2子查询中增加排序权重字段
- 修改序号计算条件为:先比较权重 → 再比较部门名称 → 最后比较申请人
3. 结果排序规则:
- 保持SortOrder优先级(普通数据先于合计)
- 按权重排序特殊部门 → 按字母顺序排序其他部门
- 申请人保持原有排序规则
4. VBA兼容性:
- 使用CASE语句实现复杂排序逻辑
- 保留原始UNION ALL结构
- 通过字段别名保持原有输出结构
执行效果:
1. 特殊部门按东→北→南→山东→西顺序排列
2. 其他部门按字母顺序排列
3. 合计行始终位于最后
4. 序号生成规则保持连续性
5. 申请人字段在同部门内保持原有排序规则
建议在实际数据中测试排序权重分配逻辑,根据实际部门名称调整CASE语句的匹配条件。
猜你喜欢
- 2025-09-12 不来看,不后悔吗Java 树结构实际应用 (二叉排序树)
- 2025-09-12 深圳尚学堂Java培训:排序方法小结-冒泡排序
- 2025-09-12 vba iif特殊部门排序方案_vba 特殊符号
- 2025-09-12 SQL查询(按部门、申请人排序并生成序号
- 2025-09-12 Comparator.comparing排序使用示例
- 2025-09-12 深圳尚学堂Java培训:可视化排序实践之选择排序
- 2025-09-12 大厂面试必看!Java单链表排序的2种方法,附完整代码与优化思路
- 2025-09-12 深圳尚学堂Java培训:排序方法小结-选择排序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)