【问题标题】:SQL Query Second sum column squaring resultsSQL查询第二个求和列平方结果
【发布时间】:2014-05-15 09:24:47
【问题描述】:

如果我分别运行 2 个查询,我会得到这样的结果..

 select A.ACTNUMST, sum(B.EXTDCOST) as [IV Total]
 from GL00105 A
 INNER JOIN SEE30303 B on A.ACTINDX = B.IVIVINDX
 group by A.ACTNUMST

 Results -
 Account No      IV Total
 2101-00-137     2033.60
 4101-00-137     83765.86
 6101-00-137     301984.23

第二次查询

 select A.ACTNUMST as [Account No], SUM(C.PERDBLNC) as [GL Total]
 from GL00105 A
 LEFT JOIN GL10110 C on A.ACTINDX = C.ACTINDX
 group by A.ACTNUMST

 Results -
 Account No      GL Total
 2101-00-137     2033.60
 4101-00-137     83765.86
 6101-00-137     302656.23

我希望能够将两个结果结合在一起进行比较,但我相信它会重复 GL 总数中每一行的总和,然后再次对其求和,它会出现像 -

这样的大数字
 select A.ACTNUMST as [Account No], sum(B.EXTDCOST) as [IV Total], SUM(C.PERDBLNC) as [GL Total]
 from GL00105 A
 INNER JOIN SEE30303 B on A.ACTINDX = B.IVIVINDX
 LEFT JOIN GL10110 C on A.ACTINDX = C.ACTINDX
 group by A.ACTNUMST

 Results -
 Account No      IV Total        GL Total
 2101-00-137     2033.60         14235.20
 4101-00-137     83765.86        116350696.20
 6101-00-137     301984.23       1612897825.84

应该是什么时候

 Results -
 Account No      IV Total        GL Total
 2101-00-137     2033.60         2033.60
 4101-00-137     83765.86        83765.86
 6101-00-137     301984.23       302656.23

请告知如何使用 sum 函数得到正确的结果。

【问题讨论】:

    标签: sql sql-server-2008 group-by sum


    【解决方案1】:

    你想要这样的东西吗?如果这不是预期的,请检查并发表评论。

    还请纠正任何语法错误。

    SELECT T1.[Account No], T1.[IV Total], T2.[GL Total] FROM
    (
        select A.ACTNUMST as [Account No], sum(B.EXTDCOST) as [IV Total]
        from GL00105 A
        INNER JOIN SEE30303 B on A.ACTINDX = B.IVIVINDX
        group by A.ACTNUMST
    ) T1
    INNER JOIN
    (
        select A.ACTNUMST as [Account No], SUM(C.PERDBLNC) as [GL Total]
        from GL00105 A
        LEFT JOIN GL10110 C on A.ACTINDX = C.ACTINDX
        group by A.ACTNUMST
    ) T2
    ON T1.[Account No] = T2.[Account No]
    

    希望对你有帮助

    【讨论】:

    • 非常感谢。解决了我的问题。我遵循相同的逻辑,但尝试将其简化一点并得到我想要的结果。选择 T3.ACTNUMST 作为 [Account No], T1.[IV Total], T2.[GL Total] from (select IVIVINDX as [Index], SUM(EXTDCOST) as [IV Total] from SEE30303 group by IVIVINDX)T1 INNER JOIN (选择 ACTINDX 作为 [Index],sum(PERDBLNC) 作为 [GL Total] from GL10110 group by ACTINDX)T2 on T1.[Index] = T2.[Index] INNER JOIN GL00105 T3 on T1.[Index] = T3.[ ACTINDX] 按 T3.ACTNUMST 排序
    • 不确定如何在评论中输入代码部分?这个论坛的新手... 5 个空格似乎不起作用。
    • 很高兴知道这一点。如果答案对您有用,请投票和/或标记为已接受。 :)
    • 您可以使用反引号,即 ` 在大多数键盘的 Esc 按钮下方的注释中添加代码块。所以你的代码看起来像这样This is a code。在这个问题中不需要这样做,但您可以在以后的帖子中这样做。检查此链接meta.stackexchange.com/questions/74784/…
    • 'select T3.ACTNUMST as [Account No], T1.[IV Total], T2.[GL Total] from (select IVIVINDX as [Index], SUM(EXTDCOST) as [IV Total]来自 IVIVINDX 的 SEE30303 组)T1 INNER JOIN(选择 ACTINDX 作为 [Index],sum(PERDBLNC) 作为 [GL Total] from GL10110 group by ACTINDX)T2 on T1.[Index] = T2.[Index] INNER JOIN GL00105 T3 on T1.[Index] = T3.[ACTINDX] order by T3.ACTNUMST'
    【解决方案2】:

    这也可以通过多个 cte 来完成

     with IVTotal as
     (
         select A.ACTNUMST, sum(B.EXTDCOST) as [IV Total]
         from   GL00105 A
         INNER  JOIN SEE30303 B 
         on     A.ACTINDX = B.IVIVINDX
         group  by A.ACTNUMST
     ),  
     GLTotal as 
     (
         select A.ACTNUMST as [Account No], SUM(C.PERDBLNC) as [GL Total]
         from   GL00105 A
         LEFT   JOIN GL10110 C 
         on     A.ACTINDX = C.ACTINDX
         group  by A.ACTNUMST
     )
     select a.*,b.[GL Total] 
     from   IVTotal a ,GLTotal b
     where  a.ACTNUMST =  b.aCTNUMST
    

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 2021-01-11
      • 2014-12-02
      • 2018-10-03
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      相关资源
      最近更新 更多