SQL语句格式化与字段重命名优化笔记
学习笔记作者:admin日期:2025-09-17点击:83
摘要:本笔记总结了对复杂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语句和调整字段名称,提升了代码的可读性和可维护性。同时,建议在长期项目中优化数据库设计,以提高效率和扩展性。