0

我有这个查询,我想对按列 omschrijving 分组的查询的所有结果求和。

查询

SELECT b.BoekRegelBedrag as total, c.omschrijving, ctl.vd1, b.BoekRegelId 
FROM condensations as c 
LEFT JOIN condensations_to_ledgers as ctl 
    ON ctl.vd1 = c.code
LEFT JOIN BoekstukRegels as b 
    ON b.BoekRegelGrootboekNr = ctl.GrootboekNummer 
LEFT JOIN GrootboekRekeningen as g 
    ON g.GrootboekNummer = ctl.GrootboekNummer
WHERE c.bedrijf_id = 118  
    AND b.BoekregelUserId = 118 
    AND ctl.bedrijf_id = 118 
    AND g.GrootboekUserId = 118 
    AND c.code < 10 
    AND g.BaSoort = 2
    AND b.BoekRegelPeriode BETWEEN 201000 AND 201013
 GROUP BY b.BoekRegelId

有没有一种简单的方法可以做到这一点?

编辑

我尝试对 BoekRegelBedrag 求和,但随后每条记录以一种或另一种方式总结了一部分,我得到了 4 个结果,而不是一个结果与总和列的总数

4

1 回答 1

1

由于您没有明确规定应该对哪一列求和,我们不得不猜测。假设不应该对 BoekRegelId 列求和(对 ID 号进行算术运算很少有意义)——然后不对ctl.vd1每个评论求和——那么:

SELECT omschrijving, SUM(total) AS sum_total
  FROM (SELECT b.BoekRegelBedrag as total, c.omschrijving, ctl.vd1, b.BoekRegelId 
          FROM condensations AS c 
          LEFT JOIN condensations_to_ledgers AS ctl
            ON ctl.vd1 = c.code
          LEFT JOIN BoekstukRegels           AS b
            ON b.BoekRegelGrootboekNr = ctl.GrootboekNummer 
          LEFT JOIN GrootboekRekeningen      AS g
            ON g.GrootboekNummer = ctl.GrootboekNummer
         WHERE c.bedrijf_id = 118  
           AND b.BoekregelUserId = 118 
           AND ctl.bedrijf_id = 118 
           AND g.GrootboekUserId = 118 
           AND c.code < 10 
           AND g.BaSoort = 2
           AND b.BoekRegelPeriode BETWEEN 201000 AND 201013
         GROUP BY b.BoekRegelId
       ) AS I
  GROUP BY omschrijving;

基本上,我将您的原始查询结果用作 FROM 子句中的“表”,然后以您可能需要的方式聚合其列。

如果核心查询接近您想要的,另一种更简单的方法也可能是可行的:

SELECT c.omschrijving, SUM(b.BoekRegelBedrag) as total
  FROM condensations AS c 
  LEFT JOIN condensations_to_ledgers AS ctl ON ctl.vd1 = c.code
  LEFT JOIN BoekstukRegels           AS b   ON b.BoekRegelGrootboekNr = ctl.GrootboekNummer 
  LEFT JOIN GrootboekRekeningen      AS g   ON g.GrootboekNummer = ctl.GrootboekNummer
 WHERE c.bedrijf_id = 118  
   AND b.BoekregelUserId = 118 
   AND ctl.bedrijf_id = 118 
   AND g.GrootboekUserId = 118 
   AND c.code < 10 
   AND g.BaSoort = 2
   AND b.BoekRegelPeriode BETWEEN 201000 AND 201013
 GROUP BY c.omschrijving;
于 2012-07-18T12:05:10.707 回答