2012-02-22 59 views
-1

我有2个表,其中一个与我所有的日记行(表名:BoekstukRegels)和一个与所有日记描述(表名:balansen)。SQL与左连接和组由

这工作得很好:

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需要一个组,但我无法得到它的工作,所以我希望别人可以帮助我进一步。

在此先感谢!

回答

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

我不能添加到jerjer的答案评论,但我认为他的寻址存在于MS SQL,当谈到在选择列表中引用非聚集的领域,因为MySQL允许你没有问题这个语法。 – 2012-02-22 09:26:24

+0

感谢乔,这工作正常! – 2012-02-22 09:54:45

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 
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 

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