SQLSERVER数据库明细表查询数据是正确,但是嵌套一层函数汇总后的数据与明细表数据和不等。

SQL SERVER 数据库明细表查询数据是正确,但是在明细表外层嵌套一层函数汇总后的数据与导出明细表数据的和不相等,产生这种问题的原因有哪些,有什么解决办法没。

Basis 发布于 2021-9-29 16:10
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
axingLv6专家互助
发布于2022-4-8 22:39

正常情况下,嵌套一层后汇总的和等于明细数据的和

你在嵌套汇总的时候还做了条件限制,这样就会导致嵌套汇总的和小于明细的和

image.png

最佳回答
0
不懂就问Lv5中级互助
发布于2021-9-29 16:14

具体的函数用的是什么

  • Basis Basis(提问者) 这个是外层嵌套的sql: ,SUM(CASE WHEN datediff(day,replace(\'${过账日期}\',\'-\',\'\')+\'01\',fgzdate)>=0 AND datediff(day,DATEADD(M, DATEDIFF(m,0,replace(\'${过账日期}\',\'-\',\'\')+\'01\')+1,-1),fgzdate) <= 0 THEN FCENT END) AS THIS_MONTH --过账日期当月
    2021-09-29 16:24 
最佳回答
0
Moki_minLv5初级互助
发布于2021-9-29 16:18

你是sum一列还是多列,之前有试过,数据库存储不规范,数值型字段存在null值,多列加总时,有null值字段的那一行几列字段加总为空,导致明细与总数对不上

  • Basis Basis(提问者) 我是按照当月,去年当月,1月-今年当月,去年1月-去年当月,去年去年,按照时间汇总一列数据。这种有没有排查方法。
    2021-09-29 16:23 
  • Moki_min Moki_min 回复 Basis(提问者) 这种直接相减的话,你试试看这样,COALESCE(去年1月,0)-COALESCE(去年当月,0) 因为其中一个没有值的话,差就都为空了
    2021-09-29 16:26 
  • Basis Basis(提问者) 回复 Moki_min 不是的,那个指的是时间区间,以下是对应当月的sql: 这个是外层嵌套的sql: ,SUM(CASE WHEN datediff(day,replace(\\\'${过账日期}\\\',\\\'-\\\',\\\'\\\')+\\\'01\\\',fgzdate)>=0 AND datediff(day,DATEADD(M, DATEDIFF(m,0,replace(\\\'${过账日期}\\\',\\\'-\\\',\\\'\\\')+\\\'01\\\')+1,-1),fgzdate) <= 0 THEN FCENT END) AS THIS_MONTH --过账日期当月
    2021-09-29 16:29 
  • Basis Basis(提问者) 因为数据量很大,不想在单元格上做运算,但就是对不上,能找到对应的一条明细数据的话,还可以找找问题。
    2021-09-29 16:31 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-9-29 17:12

整个SQL全部放出来帮你分析

  • 4关注人数
  • 555浏览人数
  • 最后回答于:2022-4-8 22:39
    请选择关闭问题的原因
    确定 取消
    返回顶部