SQL语句格式化与字段重命名优化笔记
学习笔记作者:admin日期:2025-09-17点击:11
摘要:本笔记总结了对复杂SQL语句进行格式化和字段名称修改的过程,包括使用CASE语句处理账期类型、优化嵌套逻辑结构以及将收款1-5字段重命名为收款6-10。通过缩进、换行、别名明确等方法提升可读性,并提供长期维护建议。
SQL语句格式化与字段重命名优化
1. SQL语句格式化
原始的SQL语句存在嵌套层级较深、逻辑不清晰的问题,通过对代码进行缩进、换行和关键字大写处理,使结构更易理解。
CASE
WHEN m.账期类型 = '货到付款' THEN
s.欠款
WHEN m.账期类型 = '票到付款' THEN
CASE
WHEN s.开票_日期 IS NULL THEN
0
ELSE
ISNULL(s.[开票_金额], 0)
- ISNULL(
CASE
WHEN s.[收款1_日期] <= yq.逾期日期 THEN s.[收款1_金额]
ELSE 0
END, 0
)
- ISNULL(
CASE
WHEN s.[收款2_日期] <= yq.逾期日期 THEN s.[收款2_金额]
ELSE 0
END, 0
)
- ISNULL(
CASE
WHEN s.[收款3_日期] <= yq.逾期日期 THEN s.[收款3_金额]
ELSE 0
END, 0
)
- ISNULL(
CASE
WHEN s.[收款4_日期] <= yq.逾期日期 THEN s.[收款4_金额]
ELSE 0
END, 0
)
- ISNULL(
CASE
WHEN s.[收款5_日期] <= yq.逾期日期 THEN s.[收款5_金额]
ELSE 0
END, 0
)
END
END AS [欠款]
2. 字段名称修改
为了满足业务需求,需要将原有的“收款1”至“收款5”字段改为“收款6”至“收款10”。以下是修改后的SQL片段:
s.[收款6_日期],
CASE
WHEN s.[收款6_日期] <= yq.逾期日期
THEN s.[收款6_金额]
ELSE 0
END AS [收款6_金额],
s.[收款7_日期],
CASE
WHEN s.[收款7_日期] <= yq.逾期日期
THEN s.[收款7_金额]
ELSE 0
END AS [收款7_金额],
s.[收款8_日期],
CASE
WHEN s.[收款8_日期] <= yq.逾期日期
THEN s.[收款8_金额]
ELSE 0
END AS [收款8_金额],
s.[收款9_日期],
CASE
WHEN s.[收款9_日期] <= yq.逾期日期
THEN s.[收款9_金额]
ELSE 0
END AS [收款9_金额],
s.[收款10_日期],
CASE
WHEN s.[收款10_日期] <= yq.逾期日期
THEN s.[收款10_金额]
ELSE 0
END AS [收款10_金额],
3. 替换规则说明
原始字段 | 替换后字段 |
---|---|
收款1 | 收款6 |
收款2 | 收款7 |
收款3 | 收款8 |
收款4 | 收款9 |
收款5 | 收款10 |
4. 注意事项
- 确保目标表中确实存在名为“收款6_日期”、“收款6_金额”等字段,否则查询会报错。
- 如果字段数量较多,建议考虑数据库设计是否可以规范化,避免重复字段。
5. 长期维护建议
对于类似“收款1-5”的字段,建议考虑将数据拆分为明细表,例如创建一个“收款记录表”,然后通过JOIN和聚合函数处理,减少重复逻辑。
SELECT
s.订单ID,
SUM(CASE WHEN r.收款日期 <= yq.逾期日期 THEN r.金额 ELSE 0 END) AS 已收金额
FROM 主表 s
LEFT JOIN 收款记录 r ON s.订单ID = r.订单ID
GROUP BY s.订单ID
6. 总结
通过格式化SQL语句和调整字段名称,提升了代码的可读性和可维护性。同时,建议在长期项目中优化数据库设计,以提高效率和扩展性。