找回密码
 立即注册

QQ登录

只需一步,快速开始

xiaoz 悬赏达人认证 活字格认证

金牌服务用户

146

主题

1203

帖子

3831

积分

金牌服务用户

积分
3831

活字格高级认证圣诞拼拼乐微信认证勋章悬赏达人活字格认证

QQ
xiaoz 悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2024-9-25 19:43  /   查看:458  /  回复:1
1金币
不太精通内置库sql 遇到个问题,sql统计的数据不准确,有些统计没问题,有些统计多了两倍,有些统计多了好多应该是sql问题,但是我找不出来问题在哪,求大神指教业务框架:有个项目,项目底下有合同,项目底下也有结算内容。  通过项目统计合同合计,开票合计,回款合计。发现有些能统计正确有些不行有问题。
下面是sql


SELECT
    物业_收入_项目预录.ID,
    物业_收入_项目预录.项目名称,
    COALESCE(SUM(物业收入_合同确认.含税金额), 0) AS 合同金额合计,
    COALESCE(SUM(物业收入_资金确认.实收金额), 0) AS 实际回款金额,
    COALESCE(SUM(物业收入_开票申请.本次开票金额), 0) AS 实际开票金额
FROM
    物业_收入_项目预录
LEFT JOIN
    物业收入_合同确认 ON 物业_收入_项目预录
.ID = 物业收入_合同确认.项目预录id
LEFT JOIN
    物业收入_资金确认 ON 物业_收入_项目预录
.ID = 物业收入_资金确认.项目信息
LEFT JOIN
    物业收入_开票申请 ON 物业_收入_项目预录
.ID = 物业收入_开票申请.项目预录id
GROUP BY
    物业_收入_项目预录.ID, 物业_收入_项目预录.项目名称


最佳答案

查看完整内容

大佬您好,关于SQL这一块,我们也不是很懂,因为不清楚咱们具体的数据表结构,我这边按照咱们的视图写法,猜测咱们是一个主表和三个子表,不清楚咱们主表和子表之间是一对一的关系,还是一对多的关系。 从SQL上并没有看出比较明显的问题,不过咱们可以试试先对几个子表先进行聚合,再将结果连接回主表,这样既可以优化SQL执行的性能,也可以单个子表进行检查,看看是否正确,再判断和主表连接后是否正确。具体可以参考下面的写 ...

1 个回复

倒序浏览
最佳答案
最佳答案
Grayson.Shang活字格认证 Wyn认证
超级版主   /  发表于:2024-9-25 19:43:40
来自 2#
大佬您好,关于SQL这一块,我们也不是很懂,因为不清楚咱们具体的数据表结构,我这边按照咱们的视图写法,猜测咱们是一个主表和三个子表,不清楚咱们主表和子表之间是一对一的关系,还是一对多的关系。

从SQL上并没有看出比较明显的问题,不过咱们可以试试先对几个子表先进行聚合,再将结果连接回主表,这样既可以优化SQL执行的性能,也可以单个子表进行检查,看看是否正确,再判断和主表连接后是否正确。具体可以参考下面的写法
  1. WITH 合同金额 AS (
  2.     SELECT 项目预录id, SUM(含税金额) AS 合同金额合计
  3.     FROM 物业收入_合同确认
  4.     GROUP BY 项目预录id
  5. ),
  6. 回款金额 AS (
  7.     SELECT 项目信息, SUM(实收金额) AS 实际回款金额
  8.     FROM 物业收入_资金确认
  9.     GROUP BY 项目信息
  10. ),
  11. 开票金额 AS (
  12.     SELECT 项目预录id, SUM(本次开票金额) AS 实际开票金额
  13.     FROM 物业收入_开票申请
  14.     GROUP BY 项目预录id
  15. )
  16. SELECT
  17.     物业_收入_项目预录.ID,
  18.     物业_收入_项目预录.项目名称,
  19.     COALESCE(合同金额.合同金额合计, 0) AS 合同金额合计,
  20.     COALESCE(回款金额.实际回款金额, 0) AS 实际回款金额,
  21.     COALESCE(开票金额.实际开票金额, 0) AS 实际开票金额
  22. FROM
  23.     物业_收入_项目预录
  24. LEFT JOIN 合同金额 ON 物业_收入_项目预录.ID = 合同金额.项目预录id
  25. LEFT JOIN 回款金额 ON 物业_收入_项目预录.ID = 回款金额.项目信息
  26. LEFT JOIN 开票金额 ON 物业_收入_项目预录.ID = 开票金额.项目预录id;
复制代码


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部