带左连接和分组依据的SQL

时间:2012-02-22 09:14:21

标签: mysql join group-by

我有2张表,一张包含我所有的日记行(表名:BoekstukRegels),另一张包含所有日记描述(表名:balansen)。

这很好用:

SELECT SUM(BoekRegelBedrag) AS TOTAL, BoekRegelGrootboekNr, BoekRegelPeriode
FROM BoekstukRegels
WHERE BoekregelUserId = 45 AND BoekRegelPeriode LIKE '2012%'
GROUP BY BoekRegelGrootboekNr

但问题是我没有得到描述。所以我尝试了这个:

 SELECT SUM(BoekRegelBedrag) as total, BoekRegelPeriode, BoekRegelGrootboekNr, BaOmschrijving, BaSoort
 FROM BoekstukRegels
 LEFT JOIN balansen ON BoekRegelGrootboekNr = BaGbNumber
 WHERE BoekregelUserId = 45 AND BoekRegelPeriode LIKE '2012%' AND BaSoort = 2
 GROUP BY BoekRegelGrootboekNr

这让我得到了描述,以便工作正常,但问题是总数不匹配。我知道问题是什么,因为表balansen中有重复。

所以以某种方式表balansen也需要一个小组,但我不能让它工作,所以我希望其他人可以帮助我。

提前致谢!

3 个答案:

答案 0 :(得分:0)

您必须在group by子句中包含非聚合字段: 试试这个:

SELECT 
   SUM(BoekRegelBedrag) as total, 
   BoekRegelPeriode, 
   BoekRegelGrootboekNr, 
   BaOmschrijving, 
   BaSoort
FROM BoekstukRegels
   LEFT JOIN balansen 
      ON BoekRegelGrootboekNr = BaGbNumber
WHERE
   BoekregelUserId = 45 AND 
   BoekRegelPeriode LIKE '2012%' 
   AND BaSoort = 2
GROUP BY 
   BoekRegelPeriode, 
   BoekRegelGrootboekNr, 
   BaOmschrijving, 
   BaSoort

答案 1 :(得分:0)

你知道如何在另一张桌子上做必要的小组以获得你想要的结果吗?如果是这样,那么你可以这样做:

SELECT SUM(BoekRegelBedrag) as total, 
       BoekRegelPeriode, 
       BoekRegelGrootboekNr, 
       BaOmschrijving, 
       BaSoort

FROM   BoekstukRegels LEFT JOIN 
       (SELECT field1, field2, etc. 
        FROM   balansen 
        GROUP BY FieldToGroupOn) tbl

       ON BoekRegelGrootboekNr = BaGbNumber

WHERE    BoekregelUserId = 45 AND BoekRegelPeriode LIKE '2012%' AND BaSoort = 2
GROUP BY BoekRegelGrootboekNr

答案 2 :(得分:0)

由于balansen中存在重复项,您需要确定哪些记录对您很重要,然后您就可以执行类似

的操作
LEFT JOIN (
    SELECT BaGbNumber, MAX(BaOmschrijving) AS BaOmschrijving
    FROM balansen WHERE AND BaSoort = 2 GROUP BY BaGbNumber
) AS grouped_balansen ON BoekRegelGrootboekNr = BaGbNumber

现在,您将为每个输入行加入一行,并使总计正确。

相关问题