大佬您好,关于SQL这一块,我们也不是很懂,因为不清楚咱们具体的数据表结构,我这边按照咱们的视图写法,猜测咱们是一个主表和三个子表,不清楚咱们主表和子表之间是一对一的关系,还是一对多的关系。
从SQL上并没有看出比较明显的问题,不过咱们可以试试先对几个子表先进行聚合,再将结果连接回主表,这样既可以优化SQL执行的性能,也可以单个子表进行检查,看看是否正确,再判断和主表连接后是否正确。具体可以参考下面的写法
- WITH 合同金额 AS (
- SELECT 项目预录id, SUM(含税金额) AS 合同金额合计
- FROM 物业收入_合同确认
- GROUP BY 项目预录id
- ),
- 回款金额 AS (
- SELECT 项目信息, SUM(实收金额) AS 实际回款金额
- FROM 物业收入_资金确认
- GROUP BY 项目信息
- ),
- 开票金额 AS (
- SELECT 项目预录id, SUM(本次开票金额) AS 实际开票金额
- FROM 物业收入_开票申请
- GROUP BY 项目预录id
- )
- SELECT
- 物业_收入_项目预录.ID,
- 物业_收入_项目预录.项目名称,
- COALESCE(合同金额.合同金额合计, 0) AS 合同金额合计,
- COALESCE(回款金额.实际回款金额, 0) AS 实际回款金额,
- COALESCE(开票金额.实际开票金额, 0) AS 实际开票金额
- FROM
- 物业_收入_项目预录
- LEFT JOIN 合同金额 ON 物业_收入_项目预录.ID = 合同金额.项目预录id
- LEFT JOIN 回款金额 ON 物业_收入_项目预录.ID = 回款金额.项目信息
- LEFT JOIN 开票金额 ON 物业_收入_项目预录.ID = 开票金额.项目预录id;
复制代码
|