2012-07-18 154 views
0

我已經得到了這個查詢,並且我想SUM按列omschrijving分組的查詢的所有結果。MYSQL與SUM結果和GROUP BY

查詢

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 

有沒有一種簡單的方法來做到這一點?

EDIT

我試圖SUM BoekRegelBedrag但隨後每個記錄以一種方式或其它凝聚了一部分,並且我得到一個結果的4個結果而不是與總相加列

+0

你能這些名字翻譯成英文,因爲它會更容易理解? – arnep 2012-07-18 11:54:43

+0

無需將名稱解碼爲英文。有必要指定結果中的哪些列應加總。 – 2012-07-18 11:56:59

+0

@JonathanLeffler列b.BoekRegelBedrag應加總。 – 2012-07-18 12:01:28

回答

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; 
+0

非常感謝!你的答案完成了這項工作! – 2012-07-18 12:09:13