SQL与左连接和组由
问题描述:
我有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需要一个组,但我无法得到它的工作,所以我希望别人可以帮助我进一步。
在此先感谢!
答
你知道如何做的另一台所需的组得到你想要的结果?如果是这样,那么你可以做这样的事情:
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
答
你必须包括在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
答
由于有在balansen重复的,你需要决定哪些记录对你很重要,那么你就可以像做
LEFT JOIN (
SELECT BaGbNumber, MAX(BaOmschrijving) AS BaOmschrijving
FROM balansen WHERE AND BaSoort = 2 GROUP BY BaGbNumber
) AS grouped_balansen ON BoekRegelGrootboekNr = BaGbNumber
现在您将加入每行输入一行,并确保总计正确。
我不能添加到jerjer的答案评论,但我认为他的寻址存在于MS SQL,当谈到在选择列表中引用非聚集的领域,因为MySQL允许你没有问题这个语法。 – 2012-02-22 09:26:24
感谢乔,这工作正常! – 2012-02-22 09:54:45