Если вы используете агрегат без группировки по, агрегат будет проходить по всей таблице, всегда возвращая одну строку. Например,
select max(price) from items where group = 'Servers'
возвращает одну строку с самой высокой ценой. MySQL является единственной базой данных, которая допускает другие столбцы без group by
:
select name, max(price) from items where group = 'Servers'
Но, как ни странно, он просто поместил бы случайное значение в столбце имени; имя здесь не будет именем самого дорогого сервера.
В вашем случае очевидным решением является добавление group by
к первой части объединения:
SELECT accounting.time, enclosure.enc_id_, enclosure.txt, accounting.amount sum,
SUM(ROUND(vatcode.percent/(100+vatcode.percent)*accounting.amount)) sum_vat
FROM accounting
INNER JOIN enclosure ON enclosure.id=accounting.enc_id
LEFT JOIN vatcode ON vatcode.id=accounting.vatcode_id
WHERE accounting.account_id='10'
GROUP BY accounting.time, enclosure.enc_id_, enclosure.txt, accounting.amount