我有这个查询,我想要汇总按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
有一种简单的方法吗?
修改
我尝试了SUM BoekRegelBedrag但是然后每个记录以一种方式或另一种方式总结了一部分,我得到了4个结果而不是一个结果与总计列的总和
答案 0 :(得分: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;