2012-02-22 3 views
-1

У меня есть две таблицы, одна со всеми моими строками журнала (имя таблицы: 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 позволяет этот синтаксис. –

+0

Спасибо, Джо, это прекрасно работает !! –

0

Вы должны включать письменное поле агрегированного на группы по статье: Попробуйте это:

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 

Теперь вы присоединитесь к одной строке для каждой строки ввода и получите свои итоговые значения правильно.

Смежные вопросы