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 を合計しようとしましたが、各レコードが何らかの方法で部分を合計し、合計された列の合計で 1 つの結果ではなく 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 に答える