2012-02-22 81 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 

現在您將加入每行輸入一行,並確保總計正確。